我有一个名为' userinfo.js'的模块。从DB检索有关用户的信息。这是代码:
exports.getUserInfo = function(id){
db.collection("users", function (err, collection) {
var obj_id = BSON.ObjectID.createFromHexString(String(id));
collection.findOne({ _id: obj_id }, function (err, doc) {
if (doc) {
var profile = new Array();
profile['username']=doc.username;
return profile;
} else {
return false;
}
});
});
}
从index.js(索引页的控制器,我试图访问userinfo)以这种方式:
var userinfo = require('../userinfo.js');
var profile = userinfo.getUserInfo(req.currentUser._id);
console.log(profile['username']);
Node给我发了这样一个错误:
console.log(profile['username']); --> TypeError: Cannot read property 'username' of undefined
我做错了什么?提前谢谢!
答案 0 :(得分:9)
您将返回profile['username']
而不是profile
数组本身。
此外,您可以返回false
,因此在访问之前应先检查profile
。
EDIT。再看一遍,你的return语句在回调闭包内。所以你的函数返回undefined。一种可能的解决方案,(保持节点的异步性):
exports.getUserInfo = function(id,cb){
db.collection("users", function (err, collection) {
var obj_id = BSON.ObjectID.createFromHexString(String(id));
collection.findOne({ _id: obj_id }, function (err, doc) {
if (doc) {
var profile = new Array();
profile['username']=doc.username;
cb(err,profile);
} else {
cb(err,null);
}
});
}); }
var userinfo = require('../userinfo.js');
userinfo.getUserInfo(req.currentUser._id, function(err,profile){
if(profile){
console.log(profile['username']);
}else{
console.log(err);
}
});