等待 MongoDB findOne 回调完成,然后再完成 app.get()
Waiting for MongoDB findOne callback to complete before finishing app.get()
我对Javascript比较陌生,我很难理解如何将MongoDB回调与ExpressJS get一起使用。 我的问题似乎是,如果数据库搜索花费的时间太长,该过程就会从 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);
}
});
});
如何让响应等待数据库搜索完成? 或者有没有更好的方法从请求中返回数据库文档? 感谢您的帮助!
您应该测量数据库查询所需的时间。
如果它很慢>5秒并且您无法加快速度,那么使用某种工作框架将其与请求分离可能是个好主意。
返回作业状态/结果可用的 URL 的重定向。
我对此感到愚蠢,但我完全忽略了在使用 http.createServer() 时,我的超时设置为 3000 毫秒的事实。 我误解了这个超时的原因,这就是导致我的连接过早关闭的原因。 增加这个数字可以完成我最顽固的查询。
相关文章:
- 等待 MongoDB findOne 回调完成,然后再完成 app.get()
- 表达快乐.js Restfy Koa app.listen() 和 app.get() 如何工作
- 如何避免为我的每个html文件添加ExpressJS app.get()
- 如何在express和parse中使用app.get中的app.locals
- 什么's将数组传递给app.get()的第一个参数的替换项
- 在连接DB - NodeJs的函数中使用app.get
- 如何将所选复选框的值发送到 app.get 路由
- NodeJS : app.get() 不像我所说的那样运行
- 为什么我不能从节点和 express.js 中的 app.get 函数中提取回调
- app.get and app.post get value in node.js
- Express app.get() equivalent in CasperJS
- Node.js Express app.get:浏览器想要打开链接
- Express Middleware为所有app.get()填充Jade变量
- 为什么总是触发“app.get('*')”
- 带有查询参数的节点js-app.get方法-内部服务器错误
- app.get在Node/Express中返回undefined
- app.get 不适用于基本路由
- Node.js Express app.get()没有'不在cron中工作
- 使用app.Get(节点)获取并渲染一些文件
- express.js:如何在app.get中使用http.request返回的值