Пн goose> = 5.2.0 abortTransaction () не работает - PullRequest
1 голос
/ 18 июня 2020

Я хочу выполнить простую транзакцию с двумя операциями save (), используя NodeJS и MongoDB, но abortTransaction () не работает. Первый сохраняется в базе данных, затем я вызываю ошибку, чтобы отменить транзакцию, но она не работает.

    const mongoose = require('mongoose');
    const { CuentaUsuario } = require('../models/cuentaUsuario');
    const { Visitante } = require('../models/visitante');

    exports.registrarse = async (req, res) => {
      const sesion = await mongoose.startSession();
      sesion.startTransaction();
      try {
        const { nombre, apellidos, usuario } = req.body;
        if (!nombre || !apellidos || !usuario) throw errorLanzado(400, 'Hay datos obligatorios del formulario que no se han enviado');
        parametros = req.body;
        const checkUsuario = await CuentaUsuario.findOne({ usuario: parametros.usuario });
        if (checkUsuario) throw errorLanzado(403, 'El usuario introducido ya existe');
        const checkEmail = await Visitante.findOne({ correoElectronico: parametros.correoElectronico });
        if (checkEmail) throw errorLanzado(403, 'El correo electrónico introducido ya existe');
        let cuentaUsuario = new CuentaUsuario({
          usuario: parametros.usuario,
          autoridad: 'VISITANTE',
        });
        cuentaUsuario = await cuentaUsuario.save();
        let visitante = new Visitante(parametros);
        //visitante.cuentaUsuario = cuentaUsuario; <-- This causes the error to be commented, just to test the transaction
        visitante = await visitante.save();
        await sesion.commitTransaction();
        sesion.endSession();
        return res.status(200).send({ visitante });
      } catch (error) {
        await sesion.abortTransaction();
        sesion.endSession();
        return res.status(error.status).send({ error: error.message });
      }
    };

Я использую mon goose 5.9.19.

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