{{1}}
我想将MongoDB数据(foundHomePlayers)存储到javascript变量(liveJSON)。但是这种语法不起作用?如何将整个foundHomePlayers存储到javascript变量?
答案 0 :(得分:0)
看起来您误解回调是异步的,并且在触发它们的事件发生之前不会触发,因此尝试将mongo数据存储在全局变量中是没用的 - 如您的示例所示。
var liveJSON = [];
Player.find({teamName: req.query.homeTeam}, function(err, foundHomePlayers){
if (err) {
console.log(err);
} else {
liveJSON = foundHomePlayers; <<<<------ HERE!
}
});
liveJSON // This will not be defined yet because the callback is async
我的另一个建议是你触发一个函数,它可以在获取liveJSON
数据后处理它,而不是依赖于全局变量:
function doSomethingWithLiveJSON(liveJSON) {
console.log(liveJSON);
}
Player.find({teamName: req.query.homeTeam}, function(err, foundHomePlayers){
if (err) {
console.log(err);
} else {
doSomethingWithLiveJSON(foundHomePlayers);
}
});
答案 1 :(得分:0)
是的,因为node.js具有异步特性,所以它不等待mongodb callback的回复。 如果要将mongodb数据保存到javascript变量中,请创建一些函数以将数据存储到变量中
var express=require('express');
var mongoClient = require('mongodb').MongoClient;
var app= express();
var url="mongodb://localhost:27017";
var g=[];
app.get('/',(req,res)=>{
mongoClient.connect(url,(err,db)=>{
var mydb=db.db('mongopract');
mydb.collection('practice').find({name:"solkar"},{projection:{_id:0,name:1,id:2}}).toArray((err,result)=>{
if(err){
throw err;
}else if(result.length){
storedata(result[0].name);
res.send('info'+JSON.stringify(result[0].name));
}else{
res.send('no data found');
}
})
})
});
function storedata(x){
g.push(x);
console.log(g);
}
var PORT=process.env.PORT||3001;
app.listen(PORT,()=>{
console.log('port numebr'+PORT)
});