从客户端收到req
后,服务器将查询mongodb然后发送res
,
var Article = mongoose.model('articles', articleSchema);
app.get('/api/topic',function(req,res){
Article.find({"articleID":1},function(err,doc){
res.json(doc)
})
res.send("the message that I don't want to send")
}
但是Model.find(query, fields, options, callback)
是一种异步方法。
res.json(doc)
不起作用。
如何确保res
发送doc
?
答案 0 :(得分:2)
您使用的是ES6吗?您可以使用es6或其他Promise,因为Article.find会为您返回一个新的Promise。
Article.find(...).then((doc) => res.json(doc))
.catch((err) => { // error handling });
如果您不想在catch-block中执行res.send,您还可以将方法声明为异步,然后使用await命令使您的调用同步。像这样:
app.get('/api/topic', async function(req,res){
await Article.find({"articleID":1},function(err,doc){
res.json(doc)
})
res.send("the message that I don't want to send")
}
但是我们真的不知道为什么你需要第二个res,所以可能有其他解决方案更适合你的需求。请注意,async await也是ES6 Superset的一部分。
在这里,您可以获得有关async / await
的更多信息https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
如果由于某种原因你不使用ES6而ES5,你也可以使用npm模块进行promises或async / await。
答案 1 :(得分:0)
您不应该在异步功能之外发送res。尝试下面的代码来处理错误,并另外检查查找是否为空。
var Article = mongoose.model('articles', articleSchema);
app.get('/api/topic',function(req,res){
Article.find({"articleID":1},function(err,doc){
if(err)
res.send(err);
if(doc.length === 0)
res.send(`No records found.`);
else
res.json(data);
})
}