当使用node.js和从npm install sqlite3(https://github.com/developmentseed/node-sqlite3/wiki/)安装的sqlite3软件包时,有人可以给我任何关于如何检查更新语句是否成功的建议API)
要执行更新,我正在执行以下操作:
var id = req.params.id;
var thing = req.body;
stmt = db.prepare("UPDATE FOO set name=?, year=? where id=?");
stmt.bind(thing.name, thing.year, id);
stmt.run(function(err, result) {
if (err) {
res.send(JSON.stringify(err));
res.send({'error':'An error has occurred'});
} else {
if (result) {
console.log('Success: ' + JSON.stringify(result));
}
res.send(JSON.stringify(wine));
}
});
但是,结果从未定义过。
如果我将stmt.run()更改为stmt.all(),我会得到一个结果,但它似乎是空的 - 将它打印到控制台时什么也没显示。
答案 0 :(得分:2)
result
用于SELECT
查询返回的记录。
如果UPDATE
命令失败,则会获得err
。
要了解更新记录的数量,请参阅changes
。
答案 1 :(得分:1)
我遇到了返回未定义的问题。我通过改变我的方法来修复它
来自:
db.run(query, [data.isActive, data.id], (err) => {
if (err) {
console.log(err);
res.status(500).send({'Response':'Error updating user', err });
} else {
console.log(`Rows affected: ${this.changes}`)
res.status(200).send({'Response': 'Success updating'});
};
});
致:
db.run(query, [data.isActive, data.id], async function (err) {
if (err) {
console.log(err);
res.status(500).send({'Response':'Error updating user', err });
} else {
console.log(`Rows affected: ${this.changes}`)
res.status(200).send({'Response': 'Success updating'});
};
});
注意第一行,我将它从箭头函数更改为异步函数。