sqlite-3 DB的结果未推送到Javascript数组

问题描述

我正在使用 NodeJS 应用程序,当用户向{{1}发送GET时,该应用程序将从sqlite-3文件获取电影名称和描述。 }。将对象推到数组时,似乎有些东西不见了。我不明白我所缺少的。该对象不会被推送到数组,并且在我/films将其作为响应返回时始终显示为空[]。

res.json()

解决方法

您的问题是Express在数据库检索任何值之前先返回响应对象。要解决此问题,通常需要将其移到回调函数中。

在您的情况下,尽管db.each()方法实际上接受2个函数。第一个是callback,它在检索到每个值之后运行,根本没有帮助。第二个文档在文档中称为complete,它完全可以满足您的需求。

这是db.each()维基中node-sqlite3的{​​{3}}。

这样,您可以通过以下方式编写代码:

db.each(
  'select * from film',(err,row) => { /* Does normal stuff */ }),num) => { /* Sends response to client */
    res.json(films);
    console.log(`Retrieved ${num} films`); // (Just to show what the 2nd argument does)
  }
);

请记住,如果您的电影数据库不是特别庞大,文档实际上建议使用db.all方法。