#mongoose #nestjs
Вопрос:
Документация мангуста по использованию транзакции проста, но когда она выполняется в nestjs, она возвращает ошибку:
Connection 0 was disconnected when calling `startSession`
MongooseError: Connection 0 was disconnected when calling `startSession`
at NativeConnection.startSession
Мой код:
const transactionSession = await mongoose.startSession();
transactionSession.startTransaction();
try
{
const newSignupBody: CreateUserDto = {password: hashedPassword, email, username};
const user: User = await this.userService.create(newSignupBody);
//save the profile.
const profile: Profile = await this.profileService.create(user['Id'], signupDto);
const result:AuthResponseDto = this.getAuthUserResponse(user, profile);
transactionSession.commitTransaction();
return resu<
}
catch(err)
{
transactionSession.abortTransaction();
}
finally
{
transactionSession.endSession();
}
Ответ №1:
Я нашел решение после изучения @nestjs/мангуста. Мангуст здесь не имеет к этому никакого отношения. Это является причиной возврата ошибки.
Решение:
import {InjectConnection} from '@nestjs/mongoose';
import * as mongoose from 'mongoose';
В конструкторе класса службы нам нужно добавить параметр подключения, который может использоваться службой.
export class AuthService {
constructor(
// other dependencies...
@InjectConnection() private readonly connection: mongoose.Connection){}
Вместо
const transactionSession = await mongoose.startSession();
transactionSession.startTransaction();
Теперь мы будем использовать:
const transactionSession = await this.connection.startSession();
transactionSession.startTransaction();
Таким образом, проблема отключения после StartSession() может быть решена.