Совместное использование MongoDb соединения между приложениями node.js - PullRequest
0 голосов
/ 09 декабря 2018

Моя цель состоит в том, чтобы настроить экспресс-API на основе node.js с использованием mongodb версии 4.0 и драйвера node.js 3.1.10.
На данном этапе моя часть API в основном выполнена, но в конечном итоге мои коллегиобъединить их прогресс на этом.Итак, мой вопрос:
Как я могу поделиться своим экземпляром соединения mongodb для доступа к нему несколькими способами?

Моя текущая структура имеет такой тип:

  • сервер app.js, который вызывает route.js для маршрутов, управляющих
  • route.js, который вызывает userController.js для манипулирования пользовательскими методами
  • userController.js, который управляет операциями CRUD на ресурсе /users

В результате поиска в сети рекомендуется держать соединение открытым, чтобы драйвер nodejs управлял им для всех запросов, поэтому какую часть соединения я должен предоставить:

  • результат MongoClient.connect(url) обратного вызова?
  • само значение MongoClient.connect(url)?

А когда и где я должен открыть соединение и должен ли язакрыть его?

Я знаю, что некоторые подобные вопросы существуют, но они старые и относятся к реализациям mongodb api и javscript, которые тоже старые, поэтому с помощью обратных вызовов или ждет, как я могу добиться этогоs

1 Ответ

0 голосов
/ 09 декабря 2018

Необходимо создать модуль, который экспортирует объект подключения, созданный методом MongoClient.connect .Проблема здесь в том, что метод является асинхронным, поэтому вы должны его обработать.У вас есть несколько вариантов.Один из способов может быть таким:

database.js

const MongoClient = require('mongodb').MongoClient
let url = 'mongodb://xxx'
let connection

module.exports = function() {
   return new Promise((resolve, reject) => {
      if (connection)
         resolve(connection)
      MongoClient.connect(url, (err, db) => {
         if (err)
            reject(err)
         connection = db
         resolve(connection) 
      })
   })
}

другой модуль

var getMongoDbConnection = require('./database.js')

getMongoDbConnection()
.then((db) => {
    // your connection object
})
.catch((e) => {
    // handle err
})

// or inside an async method
app.get('/middleware' => async function(req, res, next) => {
    try {
       let db = await getMongoDbConnection()
    } catch (e) {
      // handle
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...