Sequelize findOne错误:TypeError indexOf undefined

第一次使用一个新的数据库使用sequelize,通过cli完成表创build和迁移(我们有一个传统的数据库模式使用它,没有问题与模型构build匹配现有的表,所以我熟悉的基本用法) 。 当我试图testing一个新的表中的一个查询时,我得到一个typeerror。

系统:Sequelize v4.5.0,Node v8.1.4,npm v5.3.0

首先Stacktrace:

TypeError: Cannot read property 'indexOf' of undefined at attributes.map.attr (**PATH**/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1222:27) at Array.map (native) at Object.escapeAttributes (**PATH**/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1207:37) at Object.selectQuery (**PATH**/node_modules/sequelize/lib/dialects/abstract/query-generator.js:979:28) at QueryInterface.select (**PATH**/node_modules/sequelize/lib/query-interface.js:672:27) at Promise.try.then.then.then (**PATH**/node_modules/sequelize/lib/model.js:1539:34) at tryCatcher (**PATH**/node_modules/bluebird/js/release/util.js:16:23) at Promise._settlePromiseFromHandler (**PATH**/node_modules/bluebird/js/release/promise.js:512:31) at Promise._settlePromise (**PATH**/node_modules/bluebird/js/release/promise.js:569:18) at Promise._settlePromise0 (**PATH**/node_modules/bluebird/js/release/promise.js:614:10) at Promise._settlePromises (**PATH**/node_modules/bluebird/js/release/promise.js:693:18) at Async._drainQueue (**PATH**/node_modules/bluebird/js/release/async.js:133:16) at Async._drainQueues (**PATH**/node_modules/bluebird/js/release/async.js:143:10) at Immediate.Async.drainQueues (**PATH**/node_modules/bluebird/js/release/async.js:17:14) at runCallback (timers.js:800:20) at tryOnImmediate (timers.js:762:5) at processImmediate [as _immediateCallback] (timers.js:7 

代码本身是一个相当简单的连接testing。 注入依赖关系并尝试查询。

查询码:

 #!/usr/bin/env node 'use-strict'; const errorMessage = require('../../../util/error-msg'); class Sync { constructor(db, log) { this.db = db; this.log = log; } async getBatch() { try { let result = await this.db.ShopifyPriceRule.findOne({where: {id: 1}}); return result; } catch (error) { let msg = errorMessage(error, 'Sync.getBatch'); this.log.error({ error: msg }, error.message); } } } module.exports = Sync; 

连接:

 #!/usr/bin/env node 'use-strict'; const Sequelize = require('sequelize'); const fs = require('fs'); const path = require('path'); module.exports = function makeConnection(env, log, dir, indexFile) { let db = {}; try { env.logging = msg => log.trace({sequelize: msg}); let sequelize = new Sequelize(env); fs.readdirSync(dir) .filter(file => ((file.indexOf('.') !== 0) && (file !== indexFile) && (file.slice(-3) === '.js'))) .forEach(key => { const model = sequelize.import(path.join(dir, key)); db[model.name] = model; }); Object.keys(db).forEach(modelName => { if (db[modelName].associate) { db[modelName].associate(db); } }) sequelize.authenticate() .then(() => log.info('DB Connection has been established to Schema.')) .catch(err => log.error({ err: err }, 'Unable to connect with DB')); db.sequelize = sequelize; db.Sequelize = Sequelize; return db; } catch (error) { log.error({error: error}); } } 

模型

 'use strict'; module.exports = function(sequelize, DataTypes) { var ShopifyPriceRule = sequelize.define('ShopifyPriceRule', { channel_id: DataTypes.STRING, promo_id: DataTypes.INTEGER, title: DataTypes.STRING, target_type: DataTypes.STRING, target_selection: DataTypes.STRING, allocation_method:DataTypes.STRING, once_per_customer: DataTypes.BOOLEAN, customer_selection: DataTypes.STRING, entitled_product_ids: DataTypes.JSON, entitled_variant_ids: DataTypes.JSON, entitled_collection_ids: DataTypes.JSON, entitled_country_ids: DataTypes.JSON, prerequisite_saved_search_ids: DataTypes.JSON, prerequisite_subtotal_range: DataTypes.JSON, prerequisite_shipping_price_range: DataTypes.JSON }); ShopifyPriceRule.associate = models => { ShopifyPriceRule.belongsTo(models.Promo) }; return ShopifyPriceRule; }; 

我试过了

  • 阅读所有类似的问题
  • 阅读Sequelize的github问题页面中的类似问题
  • 尝试连接到同一模式中的另一个表
  • 尝试在其他列上select(以防万一默认的id字段不在模型中)
  • 原始查询在同一张表上,按预期工作

积极的,我在这里忽略了一些超级基本的东西,但我不能看到它。