From ab11e23bea6d1eb2c55390d0e859477904eca06a Mon Sep 17 00:00:00 2001 From: Lucendio <dev@lucend.io> Date: Thu, 9 Apr 2020 02:34:55 +0200 Subject: [PATCH] [app/server] service does not require db connection anymore to come up properly * change behaviour so that service still comes up regardless whether db connection can be established or not (see 12-Factor-App) - loosely tight to backing service * instead, it will log to stderr hinting this issue * successful port binding is still required --- app/server/src/db/mongo.js | 31 ++++++++++++++++++++++-------- app/server/src/index.js | 9 ++------- app/server/src/models/Uers.test.js | 13 ++++++------- 3 files changed, 31 insertions(+), 22 deletions(-) diff --git a/app/server/src/db/mongo.js b/app/server/src/db/mongo.js index caab34d..16c5284 100644 --- a/app/server/src/db/mongo.js +++ b/app/server/src/db/mongo.js @@ -1,15 +1,30 @@ const mongoose = require('mongoose'); -const mongooseInstance_ = mongoose.connect(process.env.MONGODB_URL, { - useNewUrlParser: true, - useCreateIndex: true, - useFindAndModify: false, - useUnifiedTopology: true, +const mongooseInstance_ = mongoose.connect( + process.env.MONGODB_URL, + { + useNewUrlParser: true, + useCreateIndex: true, + useFindAndModify: false, + useUnifiedTopology: true, - // NOTE: as of the docs `connectTimeoutMS` should be used when `useUnifiedTopology: true`, - // but apparently it has no impact what so ever. Instead, the following works ¯\_(ツ)_/¯ - serverSelectionTimeoutMS: 7000 // 7 sec + // NOTE: as of the docs `connectTimeoutMS` should be used when `useUnifiedTopology: true`, + // but apparently it has no impact what so ever. Instead, the following works ¯\_(ツ)_/¯ + serverSelectionTimeoutMS: 10000 // 10 sec + }, + function( err ){ + if( typeof err !== 'undefined' && err !== null ){ + console.error( new Error( `Cannot connect to database: ${ process.env.MONGODB_URL }` ) ); + }else{ + console.log( `Connect established to database: ${ process.env.MONGODB_URL }` ); + } + } +); + +process.on( 'exit', async ()=>{ + const dbClient = await mongooseInstance_; + dbClient.disconnect(); }); diff --git a/app/server/src/index.js b/app/server/src/index.js index 63432c5..10c7256 100644 --- a/app/server/src/index.js +++ b/app/server/src/index.js @@ -39,19 +39,14 @@ app.use(errorRoutes); (async function main(){ try{ - const dbClient = await dbClientInstance_; - process.on( 'exit', ()=>{ - dbClient.disconnect(); - }); - await new Promise( (__ful, rej__ )=>{ app.listen(port, function(){ console.log( `ToDo server is up on port ${ port }`); __ful(); }).on( 'error', rej__); }); - }catch(e){ - console.error( new Error( `Cannot connect to database ${ process.env.MONGODB_URL }` ) ); + }catch( err ){ + console.error( err ); process.exit( 1 ); } })(); diff --git a/app/server/src/models/Uers.test.js b/app/server/src/models/Uers.test.js index 5852d0f..28356ae 100644 --- a/app/server/src/models/Uers.test.js +++ b/app/server/src/models/Uers.test.js @@ -5,16 +5,15 @@ const { model: Users } = require( './Users.js' ); describe( 'Model: Users', ()=>{ beforeAll( async ()=>{ - await dbClientInstance_; + try{ + await dbClientInstance_; + }catch( err ){ + console.error( new Error( `Cannot connect to database: ${ process.env.MONGODB_URL }` ) ); + process.exit( 1 ); + } }); - const userData = { - name: 'myname', - email: 'myname@example.com', - password: 'mypassword' - }; - test( 'creating a user', async ()=>{ const userData = { name: 'myname', -- GitLab