当未进行任何更改时,突然不识别序列化关联/模型,Vague错误无法读取未定义的属性“字段”

时间:2019-09-11 16:32:41

标签: node.js reactjs express redux sequelize.js

一段时间以来,我一直在使用React,node,sequelize,Redux进行此项目,并且一切运行良好。前几天,我决定每次尝试更新一些节点程序包时,但是在运行npm update --save/--save-dev之后,Sequelize突然中断了。

突然,当我尝试运行该应用程序时,我最初对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只是不喜欢这些模块之一,所以我将重置git head,将我的模块文件夹丢掉,然后找出不喜欢的模块。

我重置git head,删除我的modules文件夹,然后运行npm i

当我之前从未收到此错误时,同一错误仍然会出现。

这阻止了创建序列关联表,因此我的应用甚至无法启动。

我注释掉了导致错误的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
  });
};

1 个答案:

答案 0 :(得分:0)

因此,我更改了关联语法,它再次开始工作。我对协会如何突然停止工作感到困惑,但这就是我将其更改为的方式。

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"
  });

我删除了穿透表并翻转了关联键。