所以我读过猫鼬司机 http://mongoosejs.com/NodeJS 会缓存查询,直到连接到 MongoDB(无超时)。但是当数据库崩溃时,应该可以向用户发送消息。那么让我们看一下这个 NodeJS 代码:
Users.find({}, function(err, result) {
// Do something with result and send response to the user
});
这可能会悬在 infintum 上。因此解决此问题的一种方法是执行以下操作
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 的查询)怎么办?
我通过在使用数据库的每个路由器中添加一个额外的步骤来解决这个问题。
虽然有点乱,但很有效,而且 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如果您更了解解决方案,请告诉我。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)