NodeJS+Mongoose连接超时
NodeJS + Mongoose timeout on connection
所以我读过NodeJS的mongoose驱动程序缓存查询,直到它连接到MongoDB(没有超时)。但是当数据库崩溃时,应该可以向用户发送消息。让我们看看这个NodeJS代码:
Users.find({}, function(err, result) {
// Do something with result and send response to the user
});
这可能是悬于内心的。因此,解决这个问题的一种方法是执行以下
var timeout = setTimeout(function() {
// whem we hit timeout, respond to the user with appropriate message
}, 10000);
Users.find({}, function(err, result) {
clearTimeout(timeout); // forget about error
// Do something with result and send response to the user
});
问题是:这是个好办法吗?内存泄漏(挂起对MongoDB的查询)怎么办?
我通过在每个使用DB的路由器中添加一个额外的步骤来处理这个问题。
它有点乱,但它可以工作,100%没有泄漏。
类似这样的东西:
// file: 'routes/api/v0/users.js'
router
var User = require('../../../models/user').User,
rest = require('../../../controllers/api/v0/rest')(User),
checkDB = require('../../../middleware/checkDB');
module.exports = function (app) {
app.get('/api/v0/users', checkDB, rest.get);
app.get('/api/v0/users/:id', checkDB, rest.getById);
app.post('/api/v0/users', checkDB, rest.post);
app.delete('/api/v0/users', checkDB, rest.deleteById);
app.put('/api/v0/users', checkDB, rest.putById);
};
// file: 'middleware/checkDB.js'
var HttpError = require('../error').HttpError,
mongoose = require('../lib/mongoose');
// method which checks is DB ready for work or not
module.exports = function(req, res, next) {
if (mongoose.connection.readyState !== 1) {
return next(new HttpError(500, "DataBase disconnected"));
}
next();
};
PS如果您更了解解决方案,请告诉我。
我希望我能正确理解你的问题,我想你担心,因为猫鼬采取了乐观的模式,让你理所当然地认为它最终会连接,你担心当连接失败时,你将无法优雅地处理这种情况。
Connection.open()
方法接受回调作为最后一个参数。如果无法打开连接,则将使用Error对象作为参数调用此回调。来自猫鼬的来源(端口和选项是可选的):
Connection.prototype.open = function (host, database, port, options, callback)
或者,您可以订阅连接的"错误"事件。它还接收错误对象作为参数。然而,只有当所有参数(和状态)都有效时,才会发出它,而每次都会调用回调,即使在实际连接尝试之前出现问题(例如连接不在readyState中),即使连接成功(在这种情况下,错误参数为null)。
相关文章:
- 使用优化器在慢速连接上加载main.js时需要js超时
- XMLHTTPRequest脚本中没有internet连接和超时
- Zkoss:如何通知用户会话超时或与服务器的连接丢失
- 如何在自动重新连接超时后重新连接socket.io客户端
- AngularjS到ElasticSearch的连接超时
- 节点.js浏览器响应:连接超时
- 加载资源时出现 OpenTok JS 连接超时问题
- 在 Node 中,创建具有“等待连接”超时的 http 连接的好方法是什么
- 节点.js npm 安装错误连接超时
- 节点.js套接字连接的超时更低
- NodeJS+Mongoose连接超时
- 如何解决“;连接超时”;错误
- socket.io事件重新连接超时
- Strophe.js客户端连接到服务器,断开连接/超时
- Javascript:如何检测facebook连接超时错误
- WebApi Catch连接超时错误
- 插入数据库(node.js)时Mysql连接超时
- Html5视频慢速连接超时
- Express.js 4.12连接超时上限
- Node.js无法加载网页,连接超时