74

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

在 app.js 中

mongoose.connect(...)

在 test.js 中

console.log(mongoose.connection.readyState);

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

4

4 回答 4

175

由于 mongoose 模块导出一个单例对象,因此您不必在您的连接中test.js检查连接状态:

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

var mongoose = require('mongoose');
console.log(mongoose.connection.readyState);

就绪状态是:

  • 0:断开连接
  • 1:已连接
  • 2:连接
  • 3:断开连接
于 2013-10-26T11:19:17.563 回答
7

我将它用于我的 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
}));

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

{
  "state": "up",
  "dbState": "connected"
}

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

{
"state": "up",
"dbState": "disconnected"
}

(回复中的“up”代表我的 Express Server 状态)

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

于 2019-03-22T18:00:41.633 回答
2

如前所述,“readyState”很好。“ping”也是很好的管理工具。如果它可以接受命令,它将返回 { ok: 1 }。

const mongoose = require('mongoose')

// From where ever your making your connection
const connection = await mongoose.createConnection(
    CONNECT_URI,
    CONNECT_OPTS
)

async function connectionIsUp(): Promise<boolean> {
    try {
        const adminUtil = connection.db.admin()

        const result = await adminUtil.ping()

        console.log('result: ', result) // { ok: 1 }
        return !!result?.ok === 1
    } catch(err) {
        return false
    }    
} 

或者,如果您希望它简短。

async function connectionIsUp(): Promise<boolean> {
    try {
        return await connection.db.admin().ping().then(res => !!res?.ok === 1)
    } catch (err) {
        return false
    }
}
于 2021-02-08T18:11:36.177 回答
0
var dbState = [{
    value: 0,
    label: "disconnected"
},
{
    value: 1,
    label: "connected"
},
{
    value: 2,
    label: "connecting"
},
{
    value: 3,
    label: "disconnecting"
}];

mongoose.connect(CONNECTIONSTRING, {
    useNewUrlParser: true
},
() => {
    const state = Number(mongoose.connection.readyState);
    console.log(dbState.find(f => f.value == state).label, "to db"); // connected to db
});
于 2022-01-15T16:32:03.050 回答