Mongoose.mjs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import mongoose from 'mongoose'
  2. import Settings from '@overleaf/settings'
  3. import Metrics from '@overleaf/metrics'
  4. import logger from '@overleaf/logger'
  5. import { addConnectionDrainer } from './GracefulShutdown.mjs'
  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. Metrics.mongodb.monitor(mongoose.connection.client, 'mongoose')
  13. addConnectionDrainer('mongoose', async () => {
  14. await connectionPromise
  15. await mongoose.disconnect()
  16. })
  17. mongoose.connection.on('connected', () =>
  18. logger.debug('mongoose default connection open')
  19. )
  20. mongoose.connection.on('error', err =>
  21. logger.err({ err }, 'mongoose error on default connection')
  22. )
  23. mongoose.connection.on('disconnected', () =>
  24. logger.debug('mongoose default connection disconnected')
  25. )
  26. if (process.env.MONGOOSE_DEBUG) {
  27. mongoose.set('debug', (collectionName, method, query, doc) =>
  28. logger.debug({ collectionName, method, query, doc }, 'mongoose debug')
  29. )
  30. }
  31. mongoose.plugin(schema => {
  32. schema.options.usePushEach = true
  33. })
  34. mongoose.Promise = global.Promise
  35. mongoose.connectionPromise = connectionPromise
  36. export default mongoose