2017-09-06 129 views
0

最近我在Sequelize中做了bulkCreate时遇到了一些麻烦。我得到了以下错误:sequelize BulkCreate无法读取未定义的属性'set'

TypeError: Cannot read property 'set' of undefined 
at results.forEach (/Users/mzd/Desktop/Shroogal/shroogal-dev/node_modules/sequelize/lib/model.js:2357:27) 
at Array.forEach (<anonymous>) 
at QueryInterface.bulkInsert.then.results (/Users/mzd/Desktop/Shroogal/shroogal-dev/node_modules/sequelize/lib/model.js:2356:21) 
at tryCatcher (/Users/mzd/Desktop/Shroogal/shroogal-dev/node_modules/sequelize/node_modules/bluebird/js/release/util.js:16:23) 
at Promise._settlePromiseFromHandler (/Users/mzd/Desktop/Shroogal/shroogal-dev/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:512:31) 
at Promise._settlePromise (/Users/mzd/Desktop/Shroogal/shroogal-dev/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:569:18) 
at Promise._settlePromise0 (/Users/mzd/Desktop/Shroogal/shroogal-dev/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:614:10) 
at Promise._settlePromises (/Users/mzd/Desktop/Shroogal/shroogal-dev/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:693:18) 
at Async._drainQueue (/Users/mzd/Desktop/Shroogal/shroogal-dev/node_modules/sequelize/node_modules/bluebird/js/release/async.js:133:16) 
at Async._drainQueues (/Users/mzd/Desktop/Shroogal/shroogal-dev/node_modules/sequelize/node_modules/bluebird/js/release/async.js:143:10) 
at Immediate.Async.drainQueues (/Users/mzd/Desktop/Shroogal/shroogal-dev/node_modules/sequelize/node_modules/bluebird/js/release/async.js:17:14) 
at runCallback (timers.js:781:20) 
at tryOnImmediate (timers.js:743:5) 
at processImmediate [as _immediateCallback] (timers.js:714:5) 

这是我sequelize迁移文件:

module.exports = function(sequelize, DataTypes) { 
return sequelize.define('documentsInstruments', { 
docid: { 
    type: DataTypes.INTEGER(11), 
    allowNull: false, 
    primaryKey: true, 
    autoIncrement: true, 
    field: 'docid' 
}, 
iid: { 
    type: DataTypes.BIGINT, 
    allowNull: true, 
    references: { 
    model: 'EntityInstruments', 
    key: 'IID' 
    }, 
    field: 'IID' 
}, 
docType: { 
    type: DataTypes.STRING(45), 
    allowNull: true, 
    field: 'docType' 
}, 
docPath: { 
    type: DataTypes.STRING(200), 
    allowNull: true, 
    field: 'docPath' 
}, 
creationDate: { 
    type: DataTypes.DATE, 
    allowNull: true, 
    field: 'creationDate' 
}, 
addlInfo: { 
    type: DataTypes.STRING(500), 
    allowNull: true, 
    field: 'addlInfo' 
}, 
posLabel: { 
    type: DataTypes.STRING(45), 
    allowNull: true, 
    field: 'posLabel' 
}, 
active: { 
    type: DataTypes.STRING(3), 
    allowNull: true, 
    defaultValue: 'Y', 
    field: 'active' 
}, 
origFileName: { 
    type: DataTypes.STRING(400), 
    allowNull: true, 
    field: 'origFileName' 
} 
}, { 
    tableName: 'Documents_Instruments' 
}); 
}; 

这是我bulkCreate功能:

  if(obj.documents) { 
      let data = []; 
      obj.documents.forEach((v, i) => { 
       var d = {}; 

       if(v.docid) 
        d.docid     = v.docid; 

       if(obj.iid) 
        d.iid     = obj.iid; 

       if(v.type) 
        d.docType    = v.type; 

       if(v.filePath) 
        d.docPath    = v.filePath; 

       if(v.date) 
        d.creationDate   = v.date; 

       if(v.additionalDescription) 
        d.addlInfo    = v.additionalDescription; 

       if(v.originalName) 
        d.origFileName   = v.originalName; 

       data.push(d); 
       }); 

       this.documentsInstruments 
       .bulkCreate(data, { 
        updateOnDuplicate: ['docType', 'docPath', 'creationDate', 'addlInfo', 'origFileName'] 
       }) 
       .then((d) => { 
       resolve(d); 
       }) 
       .catch((err) => { 
       reject(err); 
       }); 

     } 

我检查源代码(node_modules/sequelize/lib/model.js:2357:27)并尝试打印某些内容以进行调试,实例[i]在此取消定义.QueryInterface.bulkInsert函数

回答

0

我得到了同样的问题,我无法找出为什么这个错误也提出了。

但是,当我将升级后库版本从v4.4.2升级到4.11.0,然后该错误不再显示。

如果您的版本不是最新版本,请尝试升级版本。

+0

是的,我还没有看到这个错误了。 Sequelize可能已经修复了它。不管怎么说,还是要谢谢你 –

相关问题