node.js - Nodejs node-sqlite3 运行回调不起作用

标签 node.js sqlite

我正在尝试使用 nodejsnode-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");

    });

这里有更多解释:https://github.com/mapbox/node-sqlite3/issues/606

关于node.js - Nodejs node-sqlite3 运行回调不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10022984/

相关文章:

node.js - Pacman 升级导致与不存在的包发生冲突

javascript - Promise.all 对遍历生成器无效

sqlite - Flutter Sqflite 多表模型

android - 如何在SQL中搜索字符串中的字母

php - 如何防止 Node.js 将套接字消息拆分为更小的 block

node.js - 加快我的 cloudant 查询速度

jquery - nodejs express, ajax 发布 w/jquery 并接收响应

android - 如何在Android中计算sqlite中的记录数

android - Android 中的游标(SQLite)

sql - 用外键查询