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

时间:2018-01-08 10:59:02

标签: sequelize.js

希望有人能指出我正确的方向。我有一个"触发器"在我的应用中触发某些行为的单词。该应用程序已运行了几个月,但有时,在调用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由于某种原因未定义,但我不确定为什么或我应该注意什么纠正这个。我很感激一些指导!

2 个答案:

答案 0 :(得分:0)

这是我的错误。

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

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

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

答案 1 :(得分:0)

就我而言,将模块 sequelize-typescript1.1.0 升级到 2.1.0 解决了该问题。