确定Node.js中是否存在SQLite行

时间:2016-01-20 06:15:28

标签: node.js sqlite

我在搜索中找不到的解决方案解决了这个问题。我试图在SQLite3中创建一个简单的引用存储程序。当我输入确实存在的引用ID时,以下代码有效:

app.get('/quote/:id', function(req, res) {
if (exists) {
    db.serialize( function() {
        db.each("SELECT rowid AS id, text, author FROM quotes WHERE rowid = " + req.params.id, function(err, row) {
            if (row != null && row != undefined && row != []) {
                return res.send("Text: '" + row.text + "'<br>Author: " + row.author);
                console.log("Found that match!");
                match = true;
            }
            else {
                return res.send("Error 404!")
            }
            if (err) {
                console.log(err);
            }
        });
    });
}
else if (req.params.id < quotes.length && req.params.id >= 0) {
    res.send(quotes[req.params.id]);
    console.log("taking from the offline database");
}
});

但是当我输入一个不存在的id时,页面只是一直加载直到超时为止,而不是显示错误404。我相信问题可能是如果所需的行不存在则根本不会调用db.each函数,但是我该如何解决这个问题呢?是否可以检查是否存在某些内容然后显示404,如果没有?

1 个答案:

答案 0 :(得分:1)

可以使用EXISTS或COUNT执行单独的查询。

但是如果你想确保总是调用你的回调,那么在查询中添加另一行:

SELECT id, text, author FROM ... WHERE ...
UNION ALL
SELECT NULL, NULL, NULL
LIMIT 1;

(当{em> 时,LIMIT clause省略了NULL行。)