Files
talk/services/mongoose.js
T
Wyatt Johnson 322740d1a9 small fixes
2018-04-11 19:29:54 -06:00

73 lines
2.0 KiB
JavaScript

const {
MONGO_URL,
WEBPACK,
CREATE_MONGO_INDEXES,
LOGGING_LEVEL,
} = require('../config');
const { logger } = require('./logging');
const mongoose = require('mongoose');
// Provide a newly wrapped debugQuery function which wraps the `debug` package.
function debugQuery(name, operation, ...args) {
logger.debug(
{
query: `db.${name}.${operation}(${args
.map(arg => JSON.stringify(arg))
.join(', ')})`,
},
'mongodb query'
);
}
// Use native promises
mongoose.Promise = global.Promise;
// Check if verbose logging is enabled.
if (['debug', 'trace'].includes(LOGGING_LEVEL)) {
// Enable the mongoose debugger, here we wrap the similar print function
// provided by setting the debug parameter.
mongoose.set('debug', debugQuery);
}
if (WEBPACK) {
logger.debug('Not connecting to mongodb during webpack build');
// @wyattjoh: We didn't call connect, but because we include mongoose, it will
// hold the socket ready, preventing node from exiting. Calling disconnect
// here just ensures that the application can quit correctly.
mongoose.disconnect();
} else {
mongoose.connection.on('connected', () => logger.debug('mongodb connected'));
mongoose.connection.on('disconnected', () =>
logger.debug('mongodb disconnected')
);
// Connect to the Mongo instance.
mongoose
.connect(MONGO_URL, {
useMongoClient: true,
config: {
autoIndex: CREATE_MONGO_INDEXES,
},
})
.catch(err => {
console.error(err);
process.exit(1);
});
}
module.exports = mongoose;
// Here we include all the models that mongoose is used for, this ensures that
// when we import mongoose that we also start up all the indexing operations
// here. No point also in importing this if we're not actually doing any
// indexing now.
if (CREATE_MONGO_INDEXES) {
require('../models/action');
require('../models/asset');
require('../models/comment');
require('../models/setting');
require('../models/user');
require('./migration');
}