Check Mongoose Connection State Without Creating New Connection
Answer :
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:
- 0: disconnected
- 1: connected
- 2: connecting
- 3: disconnecting
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)
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 } }
Comments
Post a Comment