저장을 습관화
NestJS - TypeORM 트랜잭션 본문
문법 기록
하나의 메소드에서 복수의 DB를 향해 쿼리를 전송하던 도중
DB 연결 오류 등의 에러로 쿼리가 누락되는 문제를 방지하기 위함
- examples.service.ts
import { DataSource } from 'typeorm';
import { Examples } from './example.entity';
@Injectable()
export class ExamplesService {
constructor(
@InjectRepository(Examples) private examplesRepository: Repository<Examples>,
private dataSource: DataSource,
) {}
async exampleMethod() {
const queryRunner = this.dataSource.createQueryRunner();
await queryRunner.connect(); // DB 연결
await queryRunner.startTransaction(); // 트랜잭션 시작
try {
await queryRunner.manager
.getRepository(Examples)
.save({ /* DB 컬럼: 전달 인자 */ });
// 이외의 쿼리 1
// 이외의 쿼리 2
// 이외의 쿼리 3
await queryRunner.commitTransaction(); // 트랜잭션 내 변경 내용 커밋 및 완료
return true;
} catch (error) {
console.log(error);
await queryRunner.rollbackTransaction(); // 트랜잭션 실행 전으로 롤백
throw error;
} finally {
await queryRunner.release(); // DB 연결 종료
}
}
}
예를들어 쿼리 2에서 에러가 발생한다면
이전에 정상적으로 완료되었던 .getRepository(Examples).save({}), 쿼리 1를 진행하기 전으로 롤백함
'공부 > node.js' 카테고리의 다른 글
NestJS - TypeORM OneToMany, ManyToOne (0) | 2024.01.02 |
---|---|
NestJS - TypeORM CRUD (0) | 2023.12.29 |
에러 기록 - passport를 이용하여 로그인 시도 중 발생하는 401 Unauthorized 에러 (0) | 2023.12.22 |
NestJS의 라이프 사이클 (0) | 2023.12.20 |
에러 기록 - TypeError: Cannot read properties of undefined (reading 'config') (0) | 2023.12.19 |