프로그래밍

node.js에서 sqlite 사용 중 콜백으로 last insert id를 받아오지 못하는 경우

제페 2017. 8. 29. 10:10
반응형
let db = new sqlite3.Database('C:/Users/user/test.db', sqlite3.OPEN_READWRITE);
db.run('INSERT INTO Members(name, email, ip) VALUES(?, ?, ?)', ['1', '2', '3'], (err)=>{
console.log(this.lastID);
});


위 코드엔 이상이 없어보였다. this.lastID가 undefined로 세팅되어 있었고 원인을 파악할 수 없었다.


let db = new sqlite3.Database('C:/Users/user/test.db', sqlite3.OPEN_READWRITE);
db.run('INSERT INTO Members(name, email, ip) VALUES(?, ?, ?)', ['1', '2', '3'], function(err){
console.log(this.lastID);
});


하지만 이 글(https://stackoverflow.com/questions/10022984/nodejs-node-sqlite3-run-callback-not-working)의 답글 중 하나로 원인을 파악했는데 function이 아닌, 화살표 함수(()=>{})를 사용한 것이 원인이었던 것이다. 


function으로 하나 화살표 함수로 하나 같아야 할 거 같은데, 해당 부분에 대해서는 내부적으로 어떻게 처리 되야하는지 알아봐야겠다. 추측하건데, 화살표 함수는 인라인 화 같은 것이 일어나고 그 최적화로 인해 function에는 없던 것들이 빠져서 발생한 결과로 추측된다.


결론. 화살표 함수 부분을 function으로 바꾸니 this.lastID와 this.changes를 가져올 수 있었다.


자매품으로 this.lastID 대신 this.lastId를 사용하는 삽질도 검색 중 자주 볼 수 있었다.

반응형