diff --git a/server.js b/server.js index 4c4cb6f63..3bdb77b92 100644 --- a/server.js +++ b/server.js @@ -77,16 +77,9 @@ const config = require('nconf') .file('environment', { file: `config/${process.env.NODE_ENV}.json` }) .file('defaults', { file: 'config/default.json' }); -//DB -const mongoose = require('mongoose'); -mongoose.connect(config.get('mongodb_uri') || config.get('mongolab_uri') || 'mongodb://localhost/naturalcrit', - { retryWrites: false }); -mongoose.connection.on('error', (err)=>{ - console.log('Error : Could not connect to a Mongo Database.'); - console.log(' If you are running locally, make sure mongodb.exe is running.'); - console.log(err); - throw 'Can not connect to Mongo'; -}); +// DB +const DB = require('./server/db.js'); +DB.connect(config); //Account Middleware app.use((req, res, next)=>{ diff --git a/server/db.js b/server/db.js new file mode 100644 index 000000000..030d7f61b --- /dev/null +++ b/server/db.js @@ -0,0 +1,37 @@ +// The main purpose of this file is to provide an interface for database +// connection. Even though the code is quite simple and basically a tiny +// wrapper around mongoose package, it works as single point where +// database setup/config is performed and the interface provided here can be +// reused by both the main application and all tests which require database +// connection. + +const Mongoose = require('mongoose'); + +const getMongoDBURL = (config)=>{ + return config.get('mongodb_uri') || + config.get('mongolab_uri') || + 'mongodb://localhost/homebrewery'; +}; + +const handleConnectionError = (error)=>{ + if(error) { + console.error('Could not connect to a Mongo database: \n'); + console.error(error); + console.error('\nIf you are running locally, make sure mongodb.exe is running and DB URL is configured properly'); + process.exit(1); // non-zero exit code to indicate an error + } +}; + +const disconnect = async ()=>{ + return await Mongoose.disconnect(); +}; + +const connect = async (config)=>{ + return await Mongoose.connect(getMongoDBURL(config), + { retryWrites: false }, handleConnectionError); +}; + +module.exports = { + connect : connect, + disconnect : disconnect +};