NodeJS + Mongoose 连接超时

2024-03-18

所以我读过猫鼬司机 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(使用前将#替换为@)

NodeJS + Mongoose 连接超时 的相关文章

随机推荐

  • 简单的演示项目 Webpack KO(带有组件) javascript

    我想用 javascript 淘汰组件构建 SPA 经过大量阅读和摆弄之后 我似乎仍然无法使用 webpack 获得一个可用的 javascript 无打字稿 淘汰 带组件 项目 我发现了一些简单的淘汰项目 但无法让它们与 webpack
  • 错误:“dimnames”的长度[2]不等于数组范围[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我对我的 R 代码做了一些修改 效果很好 但现在我有 7 个集群 而不是 3 个 layout matrix c 1 1 2 2
  • 访问firebase firestore v9中的子集合

    我正在尝试访问子集合 消息 内的 firebase firestore 文档 user gt user uid gt messages gt docRef id gt date Date now text userText userEmai
  • Kubernetes 入口控制器无法找到证书密钥

    我正在设置一个包含入口控制器证书的机密 但在检查入口日志时出现以下错误 入口日志 W0304 05 47 32 020497 7 controller go 1153 Error getting SSL certificate defaul
  • Python 中的 Perlin 噪声:噪声值压缩,需要帮助形成正弦模式

    我目前正在研究一个涉及 Python 中 Perlin 噪声生成的项目 我使用噪声库实现了 Perlin 噪声生成 并使用这些噪声类型的组合在块内生成了不同类型的噪声值 洞穴 陆地 山丘 山脉 但是 我面临着生成的噪声值的问题 噪声值没有形
  • 如何更改 ActiveAdmin 路由 ID 的限制?

    我正在对使用 ActiveAdmin 的 Rails 站点进行更改 包括将 URL 中使用的标识符更改为有意义的字符串 在 ActiveAdmin 之外 只需更改to param每个模型的方法 这还更改了为 ActiveAdmin 页面上的
  • 将 HTTP 重定向到 HTTPS

    我目前使用此代码将 HTTP 重定向到 HTTPS RewriteCond HTTPS off RewriteRule https HTTP HOST REQUEST URI R L 它正在工作 http website com http
  • PHP cURL 和 SSL 的奇怪超时

    当我尝试访问 Amazon Cloudfront 时 将 cURL 与 PHP 结合使用时遇到奇怪的超时 这似乎会影响所有失效请求 创建发行版等 cURL 要么报告接收到 0 字节 要么报告接收到很少的字节 然后超时 Operation t
  • 从脚本返回的值未分配给 jenkins 声明性管道阶段中声明的变量

    我正在努力添加用于自动化测试的詹金斯声明式管道 在测试运行阶段 我想从日志中提取失败的测试 我正在使用常规函数来提取测试结果 该函数不是詹金斯管道的一部分 这是另一个脚本文件 该函数工作正常 它构建了一个包含失败详细信息的字符串 在管道阶段
  • 多个 JVM 与单个应用程序服务器

    我正在处理一个系统 该系统为每个客户在其自己的 JVM 中运行一个 Java 应用程序 我们有大约六台专用服务器 现在总共运行着近 100 个 JVM 以及用于管理这些 JVM 的自定义脚本集 这个设置在这一点上确实显示出了它的年龄 管理如
  • 将glade文件与程序g++链接

    Glade 文件和程序文件可能会变得有点混乱 当您希望程序可移植时 这会成为一个问题 有什么方法可以将您的程序与林间空地文件绑定吗 源代码 未完成但正在运行的项目 https github com caelwithcats valuator
  • 如何在 Erlang 中执行系统命令并使用 os:cmd/1 获取结果?

    当我尝试执行以下返回错误或在 Windows 上不退出的命令时 我总是得到空列表而不是作为字符串返回的错误 例如 I get os cmd blah 而不是类似的东西 command not found os cmd blah 在 Linu
  • Git 在交互式变基中添加所有提交消息

    我运行了交互式变基以提交abcdef git rebase i abcdef 在编辑器 Vim 中我改变了所有pick hash线路到 reword hash PREFIX Original commit message使用这个 vim 命
  • 使用 fetch 进行基本身份验证(或任何身份验证)

    找不到任何相关文档 因此在我深入研究代码之前 是否有人知道在使用 fetch 发出 REST 请求时如何使用基本身份验证 https github com github fetch https github com github fetch
  • 在一个线程中锁定互斥体并在另一个线程中解锁它

    这段代码正确且可移植吗 void aThread void while conditionA pthread mutex lock mutex1 do something pthread mutex unlock mutex2 void b
  • Require.js 加载应用程序的所有资源,包括 Polymer

    我正在为一个大型 多开发人员项目构建应用程序框架 我很喜欢结合使用 Require js 和 Angular 来管理依赖关系和类加载的想法 但现在我也想使用 Polymer 因为它非常酷 我如何使用 require js 加载聚合物元素库
  • MySQL插入不存在的地方/如果不存在

    我尝试过以下查询 INSERT INTO surfed site user site VALUES 123 456 WHERE NOT EXISTS SELECT site FROM surfed site WHERE site 456 但
  • 从工作表中获取时间时,Google 脚本会增加 +1 分钟

    var pickupTimeOld wysylka getRange C5 getValue var pickupTime Utilities formatDate pickupTimeOld GMT 1 HH mm 我在从谷歌表格中获取值
  • 如何通过Mercurial将代码推送到多个服务器?

    我们如何将代码推送到多个服务器 我们有许多服务器需要具有相同的代码副本 很难推送到单独的服务器 我知道 Mercurial 有钩子 但它们都没有给出正确的解决方案 在您的中央服务器中 您创建一个变更组 http hgbook red bea
  • NodeJS + Mongoose 连接超时

    所以我读过猫鼬司机 http mongoosejs com NodeJS 会缓存查询 直到连接到 MongoDB 无超时 但是当数据库崩溃时 应该可以向用户发送消息 那么让我们看一下这个 NodeJS 代码 Users find funct