如何检查node.js和sqlite3中的更新是否成功?

时间:2013-01-20 15:14:24

标签: node.js rest sqlite

当使用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(),我会得到一个结果,但它似乎是空的 - 将它打印到控制台时什么也没显示。

2 个答案:

答案 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'});
    };
});

注意第一行,我将它从箭头函数更改为异步函数。