Мангуст правильно начать транзакцию по другому маршруту - PullRequest
0 голосов
/ 18 февраля 2019

В моем экспресс-приложении Node.js я пытаюсь совершить транзакцию через mongoose.Я успешно подключаюсь к MongoDB и пытаюсь запустить транзакцию на основе этого подключения через другой маршрут в моем приложении.Но почему-то я не могу получить доступ к экземпляру БД через

const db = mongoose.connection.db; // undefined
const session = db.startSession() // Err : cannot read porperty startSession of undefined 
session.startTransaction();

Где-то я читаю, чтобы использовать соединение в качестве экземпляра БД, я получаю сеанс, но у меня нет метода startTransaction для этого

const session = mongoose.connection.startSession(); // works
session.startTransaction(); // Err : session.startTransaction is not a function

Может кто-нибудь объяснить мне, как правильно запустить транзакцию на mongoose?

заранее спасибо

MongoDB версия: 4.1.x версия mongoose: 5.4.X

1 Ответ

0 голосов
/ 18 февраля 2019

Дело не столько в запуске транзакции, сколько в том, как вы структурируете свой модуль.Я предлагаю вам создать модуль подключения к базе данных в виде одного сценария, а затем экспортировать оттуда «db», где вы можете хранить / обновлять ссылки на базу данных.Примерно так (тривиальный пример):

// db module
const state = {
  db: null
};
function connect() {
  state.db = mongoose.createConnection(process.env.NODE_URL);
}
function getConnection() {
  return Promise.resolve(state.db);
}      
module.exports = {
    connect,
    getConnection,
}

Затем в вашем модуле просто лениво получите:

let getConnection = require('./db'); // or wherever it is
module.exports = function(params, opts) {
    return getConnection()
        .then(db => db.startSession())
        .then(session => session.startTransaction(/* ... */))
        // ..
}

Модуль придуман, но может помочь вам в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...