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

Popular posts from this blog

Are Regular VACUUM ANALYZE Still Recommended Under 9.1?

Can Feynman Diagrams Be Used To Represent Any Perturbation Theory?