Mongoose.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. const mongoose = require('mongoose')
  2. const Settings = require('@overleaf/settings')
  3. const Metrics = require('@overleaf/metrics')
  4. const logger = require('@overleaf/logger')
  5. const { addConnectionDrainer } = require('./GracefulShutdown')
  6. if (
  7. typeof global.beforeEach === 'function' &&
  8. process.argv.join(' ').match(/unit/)
  9. ) {
  10. throw new Error(
  11. 'It looks like unit tests are running, but you are connecting to Mongo. Missing a stub?'
  12. )
  13. }
  14. mongoose.set('autoIndex', false)
  15. mongoose.set('strictQuery', false)
  16. const connectionPromise = mongoose.connect(
  17. Settings.mongo.url,
  18. Settings.mongo.options
  19. )
  20. connectionPromise
  21. .then(mongooseInstance => {
  22. Metrics.mongodb.monitor(mongooseInstance.connection.client)
  23. })
  24. .catch(error => {
  25. logger.error(
  26. { error },
  27. 'Failed to connect to MongoDB - cannot set up monitoring'
  28. )
  29. })
  30. addConnectionDrainer('mongoose', async () => {
  31. await connectionPromise
  32. await mongoose.disconnect()
  33. })
  34. mongoose.connection.on('connected', () =>
  35. logger.debug('mongoose default connection open')
  36. )
  37. mongoose.connection.on('error', err =>
  38. logger.err({ err }, 'mongoose error on default connection')
  39. )
  40. mongoose.connection.on('disconnected', () =>
  41. logger.debug('mongoose default connection disconnected')
  42. )
  43. if (process.env.MONGOOSE_DEBUG) {
  44. mongoose.set('debug', (collectionName, method, query, doc) =>
  45. logger.debug({ collectionName, method, query, doc }, 'mongoose debug')
  46. )
  47. }
  48. mongoose.plugin(schema => {
  49. schema.options.usePushEach = true
  50. })
  51. mongoose.Promise = global.Promise
  52. mongoose.connectionPromise = connectionPromise
  53. module.exports = mongoose