node.js - Sequelize 关联/模型在没有任何更改时突然无法识别,模糊错误无法读取未定义的属性“字段”
问题描述
我一直在使用 React、node、sequelize、Redux 从事这个项目一段时间,并且一切都运行良好。前几天我决定更新我的一些节点包,因为我经常尝试这样做,但是 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模型、关联、控制器,更何况关联已经运行了三个多月没有错误,突然就说无效了。
好的。美好的。没有大碍。Sequelize 只是不喜欢其中一个模块,所以我将重置我的 git 头,丢弃我的模块文件夹,并找出它不喜欢哪个模块。
我重置 git head,删除我的模块文件夹,然后运行npm i
.
当我以前从未收到此错误时,仍然会出现相同的错误。
这会阻止创建 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"
});
我删除了直通表并翻转了关联键。
推荐阅读
- angular - 由于崩溃 Ionic 5 无法打开“DetailPage”
- javascript - 渲染不同的组件时无法更新组件(useState)
- scala - 如何将 GetResponse 从 elastic4s 转换为特定案例类?
- google-cloud-platform - 使用 Podman 向 Google Container Registry 进行身份验证
- reactjs - 使用 React 钩子防止不正确的状态
- internet-explorer - Office 加载项未显示在 IE 11 中的 Powerpoint 应用程序上
- migration - 关于 ObjectBox 数据模型重命名的问题
- c++ - main 中的非可移植 const
- c# - 这是正确的..在执行'dbContext.SaveChanges()'命令时EF比较本地和上下文值以生成查询
- python - 如何将数据框中的列映射到另一个数据框的两个不同列并检索映射项?