sqlite3数据库:TypeError:无法读取未定义的属性

时间:2018-07-03 13:35:11

标签: javascript node.js sqlite

我有一个曾经可以工作的Node.js脚本,但是切换到另一个VM后,它不再起作用了。谁能看到问题所在?这是函数,db是数据库:

this.start = function() {
  logger.debug('Starting up.');
  db.serialize(() => {
    db.run("DELETE FROM jobs WHERE status = 'failed'")
      .run("UPDATE jobs SET status = 'queued'", (err) => {
        if (err) {
          logger.error(err.message);
        } else {
          logger.info('done');
        }
      });
  });
}

现在出现以下错误:

TypeError: Cannot read property 'run' of undefined
 at Database.db.serialize ()
 at TransactionDatabase.serialize
 at module.exports.start
 at Object.<anonymous>
...

错误指向第二个“ .run”。

我的Node.js版本是10.4.1,sqlite3版本是3.8.2。

我想念什么?一些模块?

1 个答案:

答案 0 :(得分:0)

我想我找到了答案。链接run()几乎同时运行查询。根据{{​​3}},函数run()启动查询,但立即返回。

但是,如果序列化链,则不能同时使用这两种方法。您正在尝试按顺序运行查询,但也要同时运行。

不过,根据您的需要,您可以嵌套序列化,并行化或回调,如this answer所示。

我猜想方法serialize()通过将run()的返回值更改为undefined来“锁定”链接。