Reputation: 40084
I have some tests - namely Supertest - that load my Express app. This app creates a Mongoose connection. I would like to know how to check the status of that connection from within my test.
In app.js
mongoose.connect(...)
In test.js
console.log(mongoose.connection.readyState);
How to access the app.js connection? If I connect using the same parameters in test.js will that create a new connection or look for existing one?
Upvotes: 86
Views: 111205
Reputation: 59
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
});
Upvotes: 1
Reputation: 1440
As stated before "readyState" is good. "ping" is also good admin utility for doing so as well. It will return { ok: 1 } if it can accept commands.
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
}
}
Or if you you want it short.
async function connectionIsUp(): Promise<boolean> {
try {
return await connection.db.admin().ping().then(res => !!res?.ok === 1)
} catch (err) {
return false
}
}
Upvotes: 4
Reputation: 847
I use this for my Express Server mongoDB status, where I use the express-healthcheck middleware
// 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
}));
Gives this in a Postman request when the DB is connected.
{
"state": "up",
"dbState": "connected"
}
Gives this response when the database was shutdown.
{
"state": "up",
"dbState": "disconnected"
}
(The "up" in the responses represent my Express Server status)
Easy to read (no numbers to interpret)
Upvotes: 11
Reputation: 203329
Since the mongoose module exports a singleton object, you don't have to connect in your test.js
to check the state of the connection:
// test.js
require('./app.js'); // which executes 'mongoose.connect()'
var mongoose = require('mongoose');
console.log(mongoose.connection.readyState);
ready states being:
Upvotes: 208