Mongoose.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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. mongoose.set('autoIndex', false)
  7. mongoose.set('strictQuery', false)
  8. const connectionPromise = mongoose.connect(
  9. Settings.mongo.url,
  10. Settings.mongo.options
  11. )
  12. connectionPromise
  13. .then(mongooseInstance => {
  14. Metrics.mongodb.monitor(mongooseInstance.connection.client)
  15. })
  16. .catch(error => {
  17. logger.error(
  18. { error },
  19. 'Failed to connect to MongoDB - cannot set up monitoring'
  20. )
  21. })
  22. addConnectionDrainer('mongoose', async () => {
  23. await connectionPromise
  24. await mongoose.disconnect()
  25. })
  26. mongoose.connection.on('connected', () =>
  27. logger.debug('mongoose default connection open')
  28. )
  29. mongoose.connection.on('error', err =>
  30. logger.err({ err }, 'mongoose error on default connection')
  31. )
  32. mongoose.connection.on('disconnected', () =>
  33. logger.debug('mongoose default connection disconnected')
  34. )
  35. if (process.env.MONGOOSE_DEBUG) {
  36. mongoose.set('debug', (collectionName, method, query, doc) =>
  37. logger.debug({ collectionName, method, query, doc }, 'mongoose debug')
  38. )
  39. }
  40. mongoose.plugin(schema => {
  41. schema.options.usePushEach = true
  42. })
  43. mongoose.Promise = global.Promise
  44. mongoose.connectionPromise = connectionPromise
  45. module.exports = mongoose