gpt4 book ai didi

arrays - NodeJS - 如何从模块返回数组

转载 作者:太空宇宙 更新时间:2023-11-04 02:49:23 24 4
gpt4 key购买 nike

我有一个名为“userinfo.js”的模块,用于从数据库检索有关用户的信息。代码如下:

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(索引页面的 Controller ,我试图从中访问用户信息):

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

我做错了什么?提前致谢!

最佳答案

您返回的是 profile['username'] 而不是 profile 数组本身。

您也可以返回false,因此您应该在访问profile之前检查它。

编辑。再次查看,您的 return 语句位于回调闭包内。所以你的函数返回未定义。一种可能的解决方案(与 Node 的异步性质保持一致):

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);
}
});

关于arrays - NodeJS - 如何从模块返回数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11705115/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com