node.js - 当没有任何更改时,Sequelize 关联/模型突然无法识别,模糊错误无法读取未定义的属性 'field'

标签 node.js reactjs express redux sequelize.js

我使用 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/

相关文章:

node.js - Metalsmith 静态站点页面缺少元数据

javascript - 等待多个元素在 selenium webdriver JavaScript 绑定(bind)中可见

javascript - 如何找出哪个包使用了不安全的 componentWillMount 方法?

javascript - ReactCSSTransitionGroup:transitionAppear 不起作用

javascript - 单击按钮时在导航中 react 幻灯片

node.js - 让 Passport.js 对用户进行身份验证时出现问题

javascript - 在 Nodejs 中将响应保存为附件

node.js - Postgres 数据库无法连接,.sync() 无法解析。 Sequelize ,PostgreSQL, Node

node.js - 如何安装旧版本的 express.js

mysql - 无法访问 Docker 容器内的 SQL 数据库