我在搜索中找不到的解决方案解决了这个问题。我试图在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,如果没有?
答案 0 :(得分:1)
可以使用EXISTS或COUNT执行单独的查询。
但是如果你想确保总是调用你的回调,那么在查询中添加另一行:
SELECT id, text, author FROM ... WHERE ...
UNION ALL
SELECT NULL, NULL, NULL
LIMIT 1;
(当{em> 时,LIMIT clause省略了NULL行。)