Я хочу выполнить простую транзакцию с двумя операциями 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.