Arrays 无法使用Node.js和MongoDB获取数据数组

Arrays 无法使用Node.js和MongoDB获取数据数组,arrays,node.js,mongodb,Arrays,Node.js,Mongodb,我试图从mongoDB获取数据,并将其存储在回调函数之外的数组格式bot中。我使用Node.js将该数组变量设置为空 我的代码如下: exports.getCardDetails=function(req,res){ var userid=req.body.userid; var token_id=req.body.token_id; var userData=[]; db.f_user_login.find({_id: mongoJs.ObjectId(user

我试图从mongoDB获取数据,并将其存储在回调函数之外的数组格式bot中。我使用Node.js将该数组变量设置为空

我的代码如下:

exports.getCardDetails=function(req,res){
    var userid=req.body.userid;
    var token_id=req.body.token_id;
    var userData=[];
    db.f_user_login.find({_id: mongoJs.ObjectId(userid),token:token_id},function(err,doc){
        if (doc.length > 0) {
            db.f_card_details.find({userid:userid},function(errs,docs){
                if (!errs) {
                    if (docs) {
                        for (var i = 0;i< docs.length;i++) {
                            var oemail=docs[i].email;
                            var id=docs[i]._id;
                            var name=docs[i].name;
                            var company=docs[i].company;
                            var position=docs[i].position;
                            var mobile=docs[i].mobile;
                            var landline=docs[i].landline;
                            var url=docs[i].url;
                            var postcode=docs[i].postcode;
                            var address=docs[i].address;
                            var isCurrentUser=docs[i].isCurrentUser;
                            db.f_user_profile.find({email:oemail},function(errs1,docs1){
                                if (!errs1) {
                                    if (docs1) {
                                        for(var j=0;j < docs1.length;j++){
                                            var profileText=docs1[j].profiletext;
                                            var biography=docs1[j].biography;
                                            var image=docs1[j].file;
                                            var profileid=docs1[j]._id;
                                        }
                                        var data={"id":id,"name":name,"company":company,"position":position,"mobile":mobile,"email":oemail,"landline":landline,"url":url,"postcode":postcode,"address":address,"profileText":profileText,"biography":biography,"image":image,"isCurrentUser":isCurrentUser,"profile_id":profileid};
                                        userData.push(data);
                                    }
                                }
                            })
                        }
                        console.log('user',userData);
                        var sdata={"statusCode": 200,"data":userData ,"message": "Your card details has been fetched successfully"};
                        res.send(sdata);
                    }
                }
            })
        }else{
            var data={"statusCode": 404,"error": "Not Found","message":"Invalid User"};
            res.send(data);
        }
    })
}
exports.getCardDetails=函数(req,res){
var userid=req.body.userid;
var token_id=req.body.token_id;
var userData=[];
db.f_user_login.find({u id:mongoJs.ObjectId(userid),token:token_id},函数(err,doc){
如果(文档长度>0){
db.f_card_details.find({userid:userid},函数(errs,docs){
如果(!错误){
如果(文档){
对于(变量i=0;i

在这里,我将所有数据推送到
userData
数组,并尝试将它们作为响应发送,但在这里,我的问题是在循环内部,所有数据都推送到该数组,但
console.log('user',userData))在作为响应发送这些数据时显示为空。我需要将这些数据作为响应发送。

用户数据填写在
db.f\u user\u配置文件中。查找
callback,您应该在那里移动
res.send(sdata)也是。此外,如果您使用的是node7,我建议将其转换为async/await:

exports.getCardDetails = async function(req,res){
    var userid=req.body.userid;
    var token_id=req.body.token_id;
    var userData=[];
    const user = await db.f_user_login.find({_id: mongoJs.ObjectId(userid),token:token_id}).next();
    if(user) {
      const cards = await db.f_card_details.find({userid:userid}).toArray();

      for (var i = 0;i < cards.length;i++) {
        var email=docs[i].email;
        var id=docs[i]._id;
        var name=docs[i].name;
        var company=docs[i].company;
        var position=docs[i].position;
        var mobile=docs[i].mobile;
        var landline=docs[i].landline;
        var url=docs[i].url;
        var postcode=docs[i].postcode;
        var address=docs[i].address;
        var isCurrentUser=docs[i].isCurrentUser;
        const profiles = await db.f_user_profile.find({email}).toArray();
        for(var j=0; j < profiles.length;j++) {
           var profileText=docs1[j].profiletext;
           var biography=docs1[j].biography;
           var image=docs1[j].file;
           var profile_id=docs1[j]._id;
           var data={id,name,company,position,mobile,email,landline,url,postcode,address,profileText,biography,image,isCurrentUser,profileid};
           userData.push(data)
        }
     }
     console.log('user',userData);
     var sdata={"statusCode": 200,"data":userData ,"message": "Your card details has been fetched successfully"};
     res.send(sdata);
   } else {
      var data={"statusCode": 404,"error": "Not Found","message":"Invalid User"};
      res.send(data);
   }
}
exports.getCardDetails=异步函数(req,res){ var userid=req.body.userid; var token_id=req.body.token_id; var userData=[]; const user=await db.f_user_login.find({u id:mongoJs.ObjectId(userid),token:token_id}).next(); 如果(用户){ const cards=wait db.f_card_details.find({userid:userid}).toArray(); 对于(变量i=0;i
这让我眼睛灼热。一定有办法简化这个查询。在重构过程中,您很可能会发现您的问题,并让下一位可能需要查看此函数的人员不必担心。还有一个提示:这是一个异步回调问题。在上面的循环完成(甚至开始)执行之前,您正在调用
res.send(sdata)
。是的,我使用settimeout函数解决了这个问题。