npm install mysql2
그건 바로 Promise wrapper 가 있기 때문이다. 자세한건 링크를 참조 바란다.
npm - mysql2 공식문서 : Promise Wrapper
https://github.com/sidorares/node-mysql2/blob/master/documentation/Promise-Wrapper.md
const connection = await _dbConn.getConnection(async conn => conn);
try {
await connection.beginTransaction();
}
const [rows] = await connection.query(`INSERT INTO EMP (id, name) VALUES (2, "exol")`);
await connection.commit();
try {
...
} catch(err) {
await connection.rollback();
connection.release();
} finally {
connection.release();
}
const mysql = require('mysql2/promise');
let _dbConn = mysql.createPool({
host: 'localhost',
user: 'user',
password: 'pass',
database: 'dbname'
});
export { _dbConn }
import { Injectable } from '@nestjs/common';
import { _dbConn } from 'src/const/db';
@Injectable()
export class UserService {
async insertUser(userData){
const connection = await _dbConn.getConnection(async conn => conn);
try {
await connection.beginTransaction();
const [rows] = await connection.query(`INSERT INTO EMP (id, name) VALUES (2, "exol")`);
await connection.commit();
return rows;
} catch(err) {
await connection.rollback();
connection.release();
console.log('Query Error');
return false;
} finally {
connection.release();
}
}
}
bad sql grammar nested exception 을 임의로 일으킨다
const [rows] = await connection.query(`INSERT INTO EMP (id, name) VALUES (${userData.id}, '${userData.name}')`);
const [rows1] = await connection.query(`INSERT INTO EMP (id, name) VALUES (${userData.id}, '${userData.name}'zzz)`);
데이터가 들어오지 않는다. 트랜잭션 정상 작동 확인.
끗!