如下是nestjs使用typeorm开启事务的操作步骤:
1.首先在nestjs项目中安装typeorm依赖,可使用npm或yarn进行安装:
npm install typeorm --save
# 或
yarn add typeorm
2.在nestjs主模块中引入typeorm模块并配置连接数据库的相关信息:
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { User } from './user.entity';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'password',
database: 'database_name',
entities: [User],
synchronize: true,
}),
TypeOrmModule.forFeature([User]),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
3.在需要开启事务的服务类中引入EntityManager:
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository, EntityManager } from 'typeorm';
import { User } from './user.entity';
@Injectable()
export class UserService {
constructor(
@InjectRepository(User)
private readonly userRepository: Repository<User>,
private readonly entityManager: EntityManager,
) {}
}
4.在服务类中使用entityManager.transaction()
方法开启事务,并将所有需要进行事务处理的操作放在回调函数中:
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository, EntityManager } from 'typeorm';
import { User } from './user.entity';
@Injectable()
export class UserService {
constructor(
@InjectRepository(User)
private readonly userRepository: Repository<User>,
private readonly entityManager: EntityManager,
) {}
async createUser(user: User) {
return this.entityManager.transaction(async manager => {
const createdUser = await manager.save(User, user);
const createdUserProfile = await manager.save(UserProfile, {
userId: createdUser.id,
fullName: user.fullName,
});
return createdUser;
});
}
}
在上述代码中,entityManager.transaction()
方法接受一个参数,即事务回调函数,回调函数中的参数manager即为事务管理器,通过该管理器可以对数据库进行操作,例如调用manager.save()
方法进行保存操作。
5.最后,在需要使用事务的地方调用服务类的createUser()
方法即可:
import { Controller, Post, Body, HttpStatus } from '@nestjs/common';
import { UserService } from './user.service';
import { User } from './user.entity';
@Controller('user')
export class UserController {
constructor(private readonly userService: UserService) {}
@Post()
async createUser(@Body() user: User) {
const createdUser = await this.userService.createUser(user);
return {
statusCode: HttpStatus.OK,
message: 'User created successfully',
data: createdUser,
};
}
}
以上即是nestjs使用typeorm开启事务的操作步骤。