2016-02-20 110 views
1

为什么用户未定义?返回数据到index.js节点快递

db.js:

var MongoClient = require('mongodb').MongoClient 
 
var users; 
 

 
MongoClient.connect('mongodb://127.0.0.1:27017/ExpressApp2', function(err, db) { 
 

 
    users = db.collection('usercollection'); 
 
    users.find().each(function(err, doc) { 
 
     console.log(doc); 
 
    }); 
 
});

index.js

var express = require('express'); 
 
var router = express.Router(); 
 

 

 
/* GET Userlist page. */ 
 
router.get('/userlist', function(req, res) { 
 
    var users = require('../db').getUsers(); 
 
    if (users==undefined) 
 
     res.send('undefined'); 
 
    else 
 
     res.send('found something'); 
 
}); 
 
    
 

 

 

 

 
module.exports = router;

集合被正确地从蒙戈检索并记录到屏幕上,但在用户索引.js给出了未定义的。

回答

0
MongoClient.connect('mongodb://127.0.0.1:27017/ExpressApp2', function(err, db)  { 
    users = db.collection('usercollection'); 
    users.find().each(function(err, doc) { 
     console.log(doc); 
    }); 
}); 

应该

module.exports.getUsers = function() { 
    MongoClient.connect('mongodb://127.0.0.1:27017/ExpressApp2', function(err, db)  { 
     return db.collection('usercollection'); 
    }); 
} 

我假定

users.find().each(function(err, doc) { 
    console.log(doc); 
}); 

是你调试的一部分,你真的想回到什么是用户的集合。重要的一点是将块添加到module.exports中作为getUsers()。

+0

我同意,这是更多我想要的,但我也尝试过类似的,但我仍然得到undefined返回到浏览器。 db.collection包含数据。难道这是我从index.js调用函数的方式吗? – siwix

0

在db.js中,您没有使用module.exports来导出用户。

你在index.js中的代码建议db.js使用getUsers函数导出一个对象,但它没有。

0

我在最后使用了这个异步调用。 index.js

router.get('/userlist', function(req, res) { 
var d = require('../db'); 
d.getUsers('input', function(users) { 
    users.each(function(err, doc) { 
     res.send(doc); 
     return false; 
    }); 

}); 

});