-
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를 사용하는 삽질도 검색 중 자주 볼 수 있었다.
반응형'프로그래밍' 카테고리의 다른 글
유용하다고 생각한 비쥬얼 스튜디오 디버깅 기능. 중단점 설정. (0) 2017.12.25 트라이브스의 네트워킹 모델 (0) 2017.12.10 session의 send부분에 대한 고찰 (0) 2014.11.23 are_same (0) 2014.11.21 람다 캡쳐에 move를 사용할 수 있어야 할 경우 (0) 2014.11.17