首页 > 解决方案 > sqlite3 数据库:TypeError:无法读取未定义的属性

问题描述

我有一个 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。

我错过了什么?某个模块?

标签: javascriptnode.jssqlite

解决方案


我想我找到了答案。链接run()几乎同时运行查询。根据这个答案,该函数run()开始查询,但立即返回。

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

虽然,根据您的需要,您可以嵌套序列化、并行化或回调,如“控制流”文档中所示。

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


推荐阅读