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

时间:2013-10-25 21:15:51

标签: node.js mongoose

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

在app.js

mongoose.connect(...)

在test.js

console.log(mongoose.connection.readyState);

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

3 个答案:

答案 0 :(得分:102)

由于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:断开连接

答案 1 :(得分: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
    }
}

答案 2 :(得分:0)

我将其用于Express Server mongoDB状态,在这里我使用express-healthcheck中间件

thing = {:items => [
  {:id => 1},
  {:id => 2},
  {:id => 3}
]}
thing[:items] = thing[:items].append({:id => 4})   # adding a new item
thing[:items] = thing[:items].select { |item| item[:id] != 2 } # removing an item

连接数据库后,在邮递员请求中提供此功能。

// 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"
}

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

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