Programming/JavaScript & TypeScript
[NPM SQLite3] statement의 run 쿼리 error handling 방법
Bonita SY
2020. 8. 25. 21:44
728x90
node.js에서 statement의 run 쿼리 실행 시 error가 발생하면 노드 인스턴스가 다운되는 현상이 있었습니다.
기존 로직)
var stmt = db.prepare(insert_query_str);
for (let i=0; i<datas.length; i++) {
let value_list = [];
for (let j=0; j<key_list.length; j++) {
let key = key_list[j];
value_list.push(datas[i][key]);
}
stmt.run(value_list);
}
stmt.finalize();
resolve({ status: true, message: `Succees to bulk insert` });
발생한 에러)
{ Error: SQLITE_MISMATCH: datatype mismatch errno: 20, code: 'SQLITE_MISMATCH' }
왠지 callback으로 error를 받을 수 있을 것 같아서, 구글링 중에 아래 페이지에서 도움이 되는 문구 발견!
documentation 눌러서 들어오니 역시나 callback을 쓸 수 있더라고요~
https://github.com/mapbox/node-sqlite3/wiki/API#databasepreparesql-param--callback
mapbox/node-sqlite3
Asynchronous, non-blocking SQLite3 bindings for Node.js - mapbox/node-sqlite3
github.com
그래서 아래와 같이 수정했습니다.
var stmt = db.prepare(insert_query_str, [], function(err) {
if (err) {
reject({ status: false, message: err });
return;
}
});
for (let i=0; i<datas.length; i++) {
let value_list = [];
for (let j=0; j<key_list.length; j++) {
let key = key_list[j];
value_list.push(datas[i][key]);
}
stmt.run(value_list, function(err) {
if (err) {
console.log(err);
reject({ status: false, message: err });
return;
}
});
}
stmt.finalize();
resolve({ status: true, message: `Succees to bulk insert` });
정상 동작~
728x90