Arrays 无法使用Node.js和MongoDB获取数据数组
我试图从mongoDB获取数据,并将其存储在回调函数之外的数组格式bot中。我使用Node.js将该数组变量设置为空 我的代码如下: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
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函数解决了这个问题。