mongodb.js 851 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. const Settings = require('@overleaf/settings')
  2. const { MongoClient, ObjectId } = require('mongodb')
  3. const clientPromise = MongoClient.connect(
  4. Settings.mongo.url,
  5. Settings.mongo.options
  6. )
  7. let setupDbPromise
  8. async function waitForDb() {
  9. if (!setupDbPromise) {
  10. setupDbPromise = setupDb()
  11. }
  12. await setupDbPromise
  13. }
  14. const db = {}
  15. async function setupDb() {
  16. const internalDb = (await clientPromise).db()
  17. db.docHistory = internalDb.collection('docHistory')
  18. db.docHistoryIndex = internalDb.collection('docHistoryIndex')
  19. db.projectHistoryMetaData = internalDb.collection('projectHistoryMetaData')
  20. }
  21. async function closeDb() {
  22. let client
  23. try {
  24. client = await clientPromise
  25. } catch (e) {
  26. // there is nothing to close
  27. return
  28. }
  29. return client.close()
  30. }
  31. module.exports = {
  32. db,
  33. ObjectId,
  34. closeDb,
  35. waitForDb
  36. }