Sequelize - 无法读取未定义的属性'getQueryInterface'

问题描述 投票:0回答:1

这里希望有人能指出我正确的方向。我有一个“触发器”字样表,可以在我的应用中触发某些行为。该应用程序已运行了几个月,但有时,在调用findAll时,会发生以下错误:

TypeError: Cannot read property 'getQueryInterface' of undefined
    at Model.get (C:\Users\Me\Projects\api\project-name-api\node_modules\sequelize\lib\model.js:104:40)
    at Model.get (C:\Users\Me\Projects\api\project-name-api\node_modules\sequelize\lib\model.js:110:17)
    at Model.getTableName (C:\Users\Me\Projects\api\project-name-api\node_modules\sequelize\lib\model.js:1087:15)
    at Model.findAll (C:\Users\Me\Projects\api\project-name-api\node_modules\sequelize\lib\model.js:1350:19)
    at getSession.then.s (C:\Users\Me\Projects\api\project-name-api\lib\message-interpreter.js:148:15)

它还会阻止应用程序运行。

AssertionError [ERR_ASSERTION]: false == true
    at Timer.listOnTimeout (timers.js:280:3)

(这甚至与findAll有关吗?这是一个随机的错误吗?因为...)我的findAll的上下文非常简单。这是一个示例电话:

let words = 'hello world';
Trigger.findAll({
    raw: true,
    where: {
      // Find any available trigger word in the message
      word: { $in: msg.split(' ') }
    }
}).then(...)

......这就是我所拥有的一切。一堆其他类似的问题似乎是由一些不正确的模型定义引起的,但我检查了我的,似乎是正确的。只有Trigger模型(在一堆其他更复杂的模型中)受此影响。

堆栈跟踪让我了解findAll的定义:事实证明this.modelManager.sequelize由于某种原因未定义,但我不确定为什么或者我应该注意什么来纠正这个问题。我很感激一些指导!

sequelize.js
1个回答
0
投票

这是我的错误。

我将我的应用程序代码修剪为以下内容,其中另一个不相关的模型包含带有函数调用的属性。然而,我用一个纯粹的字符串而不是sequelize.fn()与适当的sequelize.col()sequelize.literal()INTERVAL <interval> MINUTES部分让我偏离轨道,我忘记了literal功能。代码“工作”,但副作用显示在上面的错误中。

Session.findOrCreate({
  having: {
    startDate: {
      $lt: sequelize.col('expiry')
    }
  },
  raw: true,
  attributes: {
    include: [
      ['DATE_ADD(startDate, INTERVAL sessionTimeout MINUTE)', 'expiry']
    ]
  }
});

虽然这似乎解决了这个问题,但我不确定我是否了解其根本原因。为什么sequelize属性突然未定义?为什么这种行为不会被捕获为错误,而不是传播到这样的事情?也许我应该与Sequelize团队合作。

© www.soinside.com 2019 - 2024. All rights reserved.