检查mongoose连接状态而不创建新连接

cyb*_*bat 55 mongoose node.js

我有一些测试 - 即Supertest - 加载我的Express应用程序.这个应用程序创建一个Mongoose连接.我想知道如何从我的测试中检查该连接的状态.

在app.js

mongoose.connect(...)
Run Code Online (Sandbox Code Playgroud)

在test.js中

console.log(mongoose.connection.readyState);
Run Code Online (Sandbox Code Playgroud)

如何访问app.js连接?如果我在test.js中使用相同的参数进行连接,那么会创建一个新连接还是查找现有连接?

rob*_*lep 119

由于mongoose模块导出单个对象,因此您无需连接test.js以检查连接状态:

// test.js
require('./app.js'); // which executes 'mongoose.connect()'

var mongoose = require('mongoose');
console.log(mongoose.connection.readyState);
Run Code Online (Sandbox Code Playgroud)

准备状态是:

  • 0:断开连接
  • 1:连接
  • 2:连接
  • 3:断开连接

  • 输出 - 0 =断开,1 =连接,2 =连接,3 =断开连接[(soucre)](http://mongoosejs.com/docs/api.html#connection_Connection-readyState)我的凭据无效,它给了4 ,我在官方文档或其他任何地方都找不到. (42认同)
  • @AshwaniAgarwal查看[此文件](https://github.com/Automattic/mongoose/blob/4237515684bbab8401e579125f2a3b204765bd83/lib/connectionstate.js). (7认同)
  • @robertklep,我是这么认为的.我在mongo关闭后尝试打印就绪状态.即使在5分钟后,我仍然可以看到readyState值为1 .. :( (3认同)
  • 如果 MongoDB 停止/崩溃,状态仍然保持不变。就我而言,如果连接时为 1 并且 mongo 停止,它仍然打印 1。 (2认同)
  • @RaviKumarGupta,Mongoose 可能需要(相当)一段时间才能知道连接已断开。 (2认同)

eng*_*ete 5

我将它用于我的 Express Server mongoDB 状态,在那里我使用了 express-healthcheck 中间件

// Define server status
const mongoose = require('mongoose');
const serverStatus = () => {
  return { 
     state: 'up', 
     dbState: mongoose.STATES[mongoose.connection.readyState] 
  }
};
//  Plug into middleware.
api.use('/api/uptime', require('express-healthcheck')({
  healthy: serverStatus
}));
Run Code Online (Sandbox Code Playgroud)

当数据库连接时,在 Postman 请求中给出这个。

{
  "state": "up",
  "dbState": "connected"
}
Run Code Online (Sandbox Code Playgroud)

当数据库关闭时给出此响应。

{
"state": "up",
"dbState": "disconnected"
}
Run Code Online (Sandbox Code Playgroud)

(响应中的“up”代表我的 Express Server 状态)

易于阅读(无需解释数字)