我对Javascript比较陌生,我无法理解如何使用ExpressJS get来使用MongoDB回调。我的问题似乎是,如果数据库搜索花费的时间太长,则该过程不属于app.get(),并且会给网页一个错误代码:ERR_EMPTY_RESPONSE"。
目前它适用于大多数值,无论是查找值还是正确返回404 - 未找到,但在某些情况下,它会在转动ERR_EMPTY_RESPONSE之前挂起几秒钟。在调试器中,它到达app.get()的末尾,返回ERR_EMPTY_RESPONSE,之后findOne回调结束并转到404,但到那时为时已晚。
我尝试使用异步并引入等待但没有成功,这让我觉得我正在使用app.get和findOne错误。
以下是我的代码的一般版本:
app.get('/test', function (req, res) {
var value = null;
if (req.query.param)
value = req.query.param;
else
value = defaultValue;
var query = {start: {$lte: value}, end: {$gte: value}};
var data = collection.findOne(query, function (err, data) {
if (err){
res.sendStatus(500);
}
else if (data) {
res.end(data);
}
else{
res.sendStatus(404);
}
});
});
如何让响应等待数据库搜索完成?或者是否有更好的方法从请求中返回数据库文档?谢谢你的帮助!
答案 0 :(得分:0)
您应该测量db查询所需的时间。
如果它慢了> 5秒并且你无法加快速度,那么通过使用某种工作框架将它与请求分离可能是一个好主意。
返回重定向工作状态/结果可用的网址。
答案 1 :(得分:0)
我对此感到愚蠢,但我完全忽略了这样一个事实:当使用http.createServer()时,我的超时设置为3000毫秒。我误解了这个超时是什么,这是导致我的连接过早关闭的原因。增加这个数字可以让我最顽固的查询完成。