gpt4 book ai didi

javascript - NodeJS + Mongoose 连接超时

转载 作者:可可西里 更新时间:2023-11-01 09:46:27 25 4
gpt4 key购买 nike

所以我读过 mongoose driver对于 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 的查询)怎么办?

最佳答案

我通过在每个使用 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 如果您更了解解决方案,请告诉我。

关于javascript - NodeJS + Mongoose 连接超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9386066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com