sitelink1 https://blog.naver.com/pass4u/220027954372 
sitelink2  
sitelink3  
extra_vars4  
extra_vars5  
extra_vars6  

users 테이블과 log 테이블에 각각의 데이터를 하나의 트렌젝션으로 묶어서 수행해주는 예제이다.

 

// insert with transaction

app.post('/userstx',function(req,res){

    var user = {'userid':req.body.userid,

        'name':req.body.name,

        'address':req.body.address};

 

    connection.beginTransaction(function(err) {

        if (err) {

            throw err;

        }

        connection.query('insert into users set ?', user, function (err, result) {

            if (err) {

                console.error(err);

                connection.rollback(function () {

                    console.error('rollback error');

                    throw err;

                });

            }// if err

            console.log('insert transaction log');

            var log = {'userid': req.body.userid};

            connection.query('insert into log set ?', log, function (err, result) {

                 if (err) {

                     console.error(err);

                     connection.rollback(function () {

                        console.error('rollback error');

                         throw err;

                      });

                  }// if err

                 connection.commit(function (err) {

                    if (err) {

                        console.error(err);

                        connection.rollback(function () {

                               console.error('rollback error');

                               throw err;

                            });

                    }// if err

                    res.send(200, 'success');

 

                 });// commit

                });// insert into log

        });// inset into users

    }); // begin trnsaction

 

        connection.release();

});

 

 

 

 

먼저 connection.begintransaction을 호출한 후에, transaction이 시작되면 쿼리를 수행하기 위해서, begintrasaction안쪽 부분에서 sql 문장을 수행한다.

insert into users SQL문장을 먼저 수행한후 다음 insert into log SQL 문장을 수행하기 위해서 insert into users Query의 call back에서 insert into log SQL 문장을 수행하였다.

그 다음으로 transaction commit 처리를 insert into logs 의 callback함수에서 connection.commit을 이용해서 수행하였다. 

 

코드를 보면 알겠지만, transaction begin,insert 두개, commit을 순차 수행하기 위해서callback을 중첩 사용하였다. 코드도 복잡하고 {} 도 많다. 

이렇게 node.js의 async callback 구조로 인하여, 코드의 복잡도가 증가하는 것을 보통 callback hell(지옥)이라고 하는데, 이를 해결하기 위한 모듈로Async 와 같은 모듈들이 있다.

 

 

 

 

번호 제목 글쓴이 날짜 조회 수
» no pooling 상태에서 beginTransaction 콜백을 이용한 Transaction 처리 황제낙엽 2021.01.16 15
35 mysql.escape()로 where 문 작성 황제낙엽 2021.01.16 47
34 req, res 객체 황제낙엽 2021.01.14 19
33 mysql basic (mysql 설치, 접속, 조회) 황제낙엽 2021.01.12 18
32 urlencode : request params의 한글 처리 황제낙엽 2020.12.06 99
31 express 4.16부터는 body-parser를 내장한다 황제낙엽 2020.12.06 268
30 [TDD/REST-7강] 코드 리팩토링 (express.Router, control) 황제낙엽 2020.12.04 46
29 [TDD/REST-6강] 사용자 API 개발 황제낙엽 2020.12.03 29
28 [TDD/REST-목차][T아카데미] Node.js 기반의 REST API 서버 개발 file 황제낙엽 2020.12.03 15
27 [TDD/REST-5강] TDD로 API 서버 개발 (작업절차, get users 테스트) 황제낙엽 2020.12.01 11
26 [TDD/REST-4강] TDD 이해 및 환경 구축 (Rest API, TDD, mocha, Should, SuperTest) 황제낙엽 2020.12.01 18
25 google oatuh passport file 황제낙엽 2020.11.12 18
24 google oauth 인증 (구글 로그인) file 황제낙엽 2020.11.12 84
23 express-sse 모듈과 EventEmitter 황제낙엽 2020.09.20 265
22 [Node Package Manager] npm audit file 황제낙엽 2020.09.17 5
21 Node.js , NPM 관련 명령어 정리 황제낙엽 2020.09.10 141
20 [Deprecated] request / request 황제낙엽 2020.08.26 123
19 dotenv (Node.js 기반에서 환경변수 사용하기) 황제낙엽 2020.08.23 81
18 로깅툴 morgan (Logging) 황제낙엽 2020.08.19 12
17 nodemon 설치 및 활용 file 황제낙엽 2020.08.16 102