74

Express アプリをロードするいくつかのテスト、つまり Supertest があります。このアプリは、Mongoose 接続を作成します。テスト内からその接続のステータスを確認する方法を知りたいです。

app.js 内

mongoose.connect(...)

test.js で

console.log(mongoose.connection.readyState);

app.js 接続にアクセスするには? test.js で同じパラメーターを使用して接続すると、新しい接続が作成されるか、既存の接続が検索されますか?

4

4 に答える 4

175

test.jsmongoose モジュールはシングルトン オブジェクトをエクスポートするため、接続の状態を確認するために接続する必要はありません。

// 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
}));

DB が接続されているときに Postman リクエストでこれを指定します。

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

データベースがシャットダウンされたときにこの応答を返します。

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

(応答の「up」は、Express Server のステータスを表します)

読みやすい(解釈する数字がない)

于 2019-03-22T18:00:41.633 に答える
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 に答える