2016-01-20 2 views
0

Решения, найденные мной в моих поисках, не устраняли эту проблему. Я пытаюсь сделать простую программу хранения цитат в SQLite3. Следующий код работает, когда я вхожу в кавычки идентификатор, который действительно существует:Определить, не существует ли строка SQLite в Node.js

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"); 
} 
}); 

но когда я ввожу идентификатор, который не существует, вместо того, чтобы показывать ошибку 404, страница просто не держит нагрузку, пока не выйдет время. Я считаю, что проблема может заключаться в том, что функция db.each вообще не вызывает вызов, если нужная строка не существует, но как это исправить? Можно ли проверить, существует ли что-то, а затем отображать 404, если нет?

ответ

1

Можно было бы выполнить отдельный запрос с использованием EXISTS или COUNT.

Но если вы хотите, чтобы убедиться, что ваш обратный вызов всегда вызывается, добавьте еще одну строку запроса: (. LIMIT clause опускает строку NULL, когда некоторые данные является найдено)

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

+0

Спасибо огромное! Это сработало как шарм, когда я изменил 'if (row! = Null)' to 'if (row.text! = Null)' !! –

Смежные вопросы