Node.js MongoDB返回null,但查询单独工作
在post函数中,我试图检索用户的第n个活动(因为我有一个下拉列表,返回活动的索引号)。当我运行查询时Node.js MongoDB返回null,但查询单独工作,node.js,mongodb,express,Node.js,Mongodb,Express,在post函数中,我试图检索用户的第n个活动(因为我有一个下拉列表,返回活动的索引号)。当我运行查询时 collection.find({'local.email':req.user.local.email}, {'local.activities':{$slice : [currActivity,1]}}); 我在Robo3T中收到正确的活动对象。 但是,当我在post函数内的节点中调用相同的查询时,它返回一个未定义的查询 app.post('/addlog',function(
collection.find({'local.email':req.user.local.email},
{'local.activities':{$slice : [currActivity,1]}});
我在Robo3T中收到正确的活动对象。
但是,当我在post函数内的节点中调用相同的查询时,它返回一个未定义的查询
app.post('/addlog',function(req,res){
var currActivity = req.body.curAct;
var score = req.body.score;
var comment = req.body.reason;
mongoose.connect('mongodb://****:****@ds044907.mlab.com:44907/intraspect',function (err, database) {
if (err)
throw err
else
{
db = database;
var collection = db.collection('users');
var retrievedAct = collection.find({'local.email':req.user.local.email},
{'local.activities':{$slice : [currActivity,1]}}).toArray().then(console.log(retrievedAct));
if (retrievedAct.length > 0) { printjson (retrievedAct[0]); }
console.log(currActivity);
console.log(retrievedAct[0]);
// console.log(req.body.newAct);
collection.update({'local.activities.name':retrievedAct[0]},
{$push: {'local.activities.log' : {
comments: comment,
score: score,
log_time: Date.now()
}}})
.then(function(){
res.redirect('/homepage');
})
.catch(function() {
console.log('Error');
});
}
});
}))
我检查了currActivity变量是否包含第n个activity的整数值 如果要获得集合.find().toArray()的结果,如中所述,您有两个选项:
- 将回调传递给
,就像处理.toArray()
mongoose.connect()
- 使用如果不通过回调它将返回的承诺
此外,在代码中混合了回调风格和承诺。我建议您统一代码。如果您使用的是大于8的Node.js版本,那么使用async/await可能会更好,这会使它更简单。我向.toArray()添加了一个回调函数,如下所示:
var retrievedAct=collection.find({'local.email':req.user.local.email},{'local.activities':{$slice:[curractive,1]})。toArray(函数(err,act){If(err)抛出err else{retrievedAct=act;}})代码>但是retrievedAct仍然是未定义的。如果使用回调样式,则无法获得这样的值,其余代码必须在回调中(就像在mongoose.connect()
回调中所做的那样)。