我正在尝试使用 nodejs
和 node-sqlite3
包删除 sqlite 数据库中的一行。
当我运行删除命令并手动检查条目时,我可以看到查询已成功删除该行,但我似乎无法编写确认这一点的代码。
这是查询
db.run("DELETE FROM Table1 WHERE id=? AND username=?", [id, user], function(error) {
console.log(error);
});
无论输入错误还是正确,它都会向控制台输出null
。如果提供了正确的详细信息,它将删除它并打印 null,如果提供了错误的 id 和用户,它仍然打印 null。
有什么地方可能是错的吗?
谢谢
最佳答案
对于我之前的问题,问题是我使用粗箭头 进行回调声明。从 javascript 文档中,我发现在arrow function(粗箭头)中,this 具有词法作用域,因此该结果未定义且未被评估为在图书馆文件中说。使用其他匿名函数,this 在动态范围 中有界,因此 this.changes 是有值(value)的。
现在,使用下面的代码就可以了:
var sql = 'update recipes set stars = stars + 1 where id = ?';
db.run(sql,
[
1 // id = 1 execute update - if id = 11111 do nothing
], function(err) {
if(err)
throw err;
console.log("VALUE CHANGES: " + this.changes + " - " + util.inspect(this, { showHidden: false, depth: null }));
if(this.changes == 1)
console.log("WORK DONE");
else
console.log("NOTHING DONE");
});
关于node.js - Nodejs node-sqlite3 运行回调不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10022984/