我正在使用mongo db.I工作在节点js应用程序中。我在更新的部分之前显示关键字的结果。我想如果用户输入关键字那么它应该显示在json但是在new关键字之前在mongodb关键字成功更新时显示在res.json中。我做错了什么?
app.post('/keyword', isLoggedIn, function (req, res) {
User.update({_id:req.user._id},{$addToSet:{keyword:req.body.tags}},function (err, result) {
if (err) return handleError(err);
return true;
});
console.log(w);
res.json({user:req.user})
})
假设我已经在关键字数组中有'lio',当我输入'apple'时它应该显示两个结果但它只显示lio关键字。在页面重新加载后它会显示两个关键字。
你这样做是错误的。 JavaScript是一种异步语言。在您的情况下,该函数返回数据而不等待响应。基本上,在执行更新功能之前返回数据。要解决此问题,请仅在更新功能内返回用户数据。
app.post('/keyword', isLoggedIn, function (req, res) {
User.findOneAndUpdate({_id:req.user._id},{$addToSet:
{keyword:req.body.tags}, {returnNewDocument: true}},(err, result) => {
if (err) return handleError(err);
return res.json({user:user, result:result, flag: 1});
});
});
您可以发送标志变量以检查值是否已正确更新。
以下代码将尝试使用user._id
值作为条件将标记数组推送到单个匹配文档中。
User.findOneAndUpdate(
// <filter>
{_id:req.user._id},
// <update>
{$push:{keyword: {$each: req.body.tags}}},
// <options>
{returnNewDocument: true} // Optional, depending on if you want the updated doc.
// Callback
function callback(err, doc, raw) {
// Evaluate callback code...
res.json({user:req.user})
}
);
有关每个参数的用途的更多信息,请参阅findOneAndUpdate
文档。