我使用 React、node、sequelize、Redux 开发这个项目已经有一段时间了,一切都运行良好。有一天,我决定更新一些 Node 包,因为我经常这样做,但是 Sequelize 在我运行 npm update --save/--save-dev
后突然崩溃了。 .
突然间,当我尝试运行应用程序时,我对 sql 的初始获取失败,并且我的 Sequelize 模型抛出错误:
/node_modules/sequelize/lib/associations/belongs-to-many.js:130
this.sourceKeyField = this.source.rawAttributes[this.sourceKey].field || this.sourceKey;
^
TypeError: Cannot read property 'field' of undefined
at new BelongsToMany (/Users/dlmusic/Desktop/Cullan - Site/Metadata-Tagging-With-Redux/node_modules/sequelize/lib/associations/belongs-to-many.js:130:69)
at Function.belongsToMany (/Users/dlmusic/Desktop/Cullan - Site/Metadata-Tagging-With-Redux/node_modules/sequelize/lib/associations/mixin.js:64:25)
at Object.<anonymous> (/Users/dlmusic/Desktop/Cullan - Site/Metadata-Tagging-With-Redux/authenticationBI.js:63:12)
at Module._compile (internal/modules/cjs/loader.js:776:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
at Module.load (internal/modules/cjs/loader.js:643:32)
at Function.Module._load (internal/modules/cjs/loader.js:556:12)
at Module.require (internal/modules/cjs/loader.js:683:19)
at require (internal/modules/cjs/helpers.js:16:16)
at Object.<anonymous> (/Users/dlmusic/Desktop/Cullan - Site/Metadata-Tagging-With-Redux/api/routes/backgroundInstrumentalsRoutes.js:6:36)
at Module._compile (internal/modules/cjs/loader.js:776:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
at Module.load (internal/modules/cjs/loader.js:643:32)
at Function.Module._load (internal/modules/cjs/loader.js:556:12)
at Module.require (internal/modules/cjs/loader.js:683:19)
at require (internal/modules/cjs/helpers.js:16:16)
at Object.<anonymous> (/Users/dlmusic/Desktop/Cullan - Site/Metadata-Tagging-With-Redux/server.js:4:39)
at Module._compile (internal/modules/cjs/loader.js:776:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
at Module.load (internal/modules/cjs/loader.js:643:32)
at Function.Module._load (internal/modules/cjs/loader.js:556:12)
at Function.Module.runMain (internal/modules/cjs/loader.js:839:10)
这很奇怪。我最近才开始从事前端工作。我已经一个多月没有碰过任何 Sequelize 模型、关联或 Controller 了,更不用说这些关联已经工作了三个多月没有错误,但突然它说它无效。
好的。美好的。没什么大不了的。 Sequelize 只是不喜欢其中一个模块,所以我将重置我的 git head,删除我的模块文件夹,并找出它不喜欢哪个模块。
我重置了 git head,删除了我的模块文件夹,然后运行 npm i
.
当我以前从未遇到过此错误时,仍然出现相同的错误。
这会阻止创建 Sequelize 关联表,因此我的应用程序甚至无法启动。
我注释掉了导致错误的 Sequelize 关联,现在 Sequelize 运行良好,但我需要这些关联才能使我的应用程序的某些功能正常工作。
我正准备拔掉我的头发,这让我非常沮丧。我什至不知道该怎么办了。我尝试通过改变方法来扰乱我的联想,但实际上没有任何效果。
以下是它显然有问题的 Sequelize 关联。需要澄清的是,每个类别可以有多种样式,但每种样式只有一个类别。
CategoryBI.belongsToMany(StyleBI,
{ constraints: false,
timestamps: false,
foreignKey: "cat_id",
sourceKey: "style_id",
through: "cat_styles"
});
StyleBI.belongsTo(CategoryBI,
{ constraints: false,
timestamps: false,
foreignKey: "cat_id",
targetKey: "cat_id",
through: "cat_styles"
});
以及型号:
module.exports = function(sequelize, DataTypes) {
return sequelize.define("categories", {
cat_id: {
type: DataTypes.INTEGER(11),
allowNull: false,
primaryKey: true,
autoIncrement: true
},
cat_name: {
type: DataTypes.STRING(50),
allowNull: true
}
}, {
tableName: "categories",
underscored: true,
timestamps: false
});
};
module.exports = function(sequelize, DataTypes) {
return sequelize.define("styles", {
style_id: {
type: DataTypes.INTEGER(11),
allowNull: false,
primaryKey: true,
autoIncrement: true
},
cat_id: {
type: DataTypes.INTEGER(8),
allowNull: false,
defaultValue: "0"
},
style_name: {
type: DataTypes.STRING(50),
allowNull: true
},
style_img: {
type: DataTypes.STRING(55),
allowNull: true
}
}, {
tableName: "styles",
underscored: true,
timestamps: false
});
};
最佳答案
所以我更改了关联语法,它又开始工作了。我完全困惑于该协会如何突然停止工作,但这是我将其更改为的。
CategoryBI.hasMany(StyleBI,
{ constraints: false,
timestamps: false,
foreignKey: "style_id",
sourceKey: "cat_id"
});
StyleBI.belongsTo(CategoryBI,
{ constraints: false,
timestamps: false,
foreignKey: "style_id",
targetKey: "cat_id"
});
我删除了直通表并翻转了关联键。
关于node.js - 当没有任何更改时,Sequelize 关联/模型突然无法识别,模糊错误无法读取未定义的属性 'field',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57893394/