【问题标题】:Sequelize error : cannot find property "startYear" of undefined续集错误:找不到未定义的属性“startYear”
【发布时间】:2018-11-26 03:10:52
【问题描述】:

我正在使用 sequelize cli 并为每个模型生成了每个迁移文件,我正在尝试使用单个迁移文件生成所有表,因为它们相互依赖,但我不断收到此错误

找不到未定义的属性 startYear

另外,我需要一个关于如何使用 sequelize cli 在 sequelize 中更改模型的教程。

"use strict";
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface
      .createTable("Users", {
        id: {
          allowNull: false,
          autoIncrement: true,
          primaryKey: true,
          type: Sequelize.INTEGER
        },
        googleId: {
          allowNull: true,
          type: Sequelize.STRING
        },
        facebookId: {
          allowNull: true,
          type: Sequelize.STRING
        },
        fullName: {
          type: Sequelize.STRING,
          allowNull: false
        },
        email: {
          type: Sequelize.STRING,
          allowNull: false,
          unique: true,
          validate: {
            isEmail: true
          }
        },
        password: {
          type: Sequelize.STRING,
          allowNull: false,
          validate: {
            isAlphanumeric: true,
            notEmpty: true
          }
        },
        isVerified: {
          type: Sequelize.BOOLEAN,
          allowNull: false,
          defaultValue: false
        },
        createdAt: {
          allowNull: false,
          type: Sequelize.DATE
        },
        updatedAt: {
          allowNull: false,
          type: Sequelize.DATE
        }
      })
      .then(function() {
        return queryInterface
          .createTable("DesignationMasters", {
            id: {
              allowNull: false,
              autoIncrement: true,
              primaryKey: true,
              type: Sequelize.INTEGER
            },
            designationName: {
              type: Sequelize.STRING,
              allowNull: false,
              unique: true
            },
            createdAt: {
              allowNull: false,
              type: Sequelize.DATE
            },
            updatedAt: {
              allowNull: false,
              type: Sequelize.DATE
            }
          })
          .then(function() {
            return queryInterface
              .createTable("companyDetails", {
                id: {
                  allowNull: false,
                  autoIncrement: true,
                  primaryKey: true,
                  type: Sequelize.INTEGER
                },
                companyName: {
                  type: Sequelize.STRING,
                  allowNull: true,
                  defaultValue: null
                },
                userId: {
                  type: Sequelize.INTEGER,
                  allowNull: false,
                  references: {
                    model: "Users",
                    key: "id"
                  }
                },
                designationId: {
                  type: Sequelize.INTEGER,
                  allowNull: false,
                  references: {
                    model: "DesignationMasters",
                    key: "id"
                  }
                },
                startYear: {
                  type: Sequelize.INTEGER,
                  validate: {
                    isNumeric: true,
                    len: [4, 4]
                  },
                  defaultValue: null
                },
                endYear: {
                  type: Sequelize.INTEGER,
                  validate: {
                    isNumeric: true,
                    len: [4, 4],
                    min: this.startYear
                  },
                  defaultValue: null
                },
                isCurrentWorkplace: {
                  type: Sequelize.BOOLEAN,
                  defaultValue: false
                },
                createdAt: {
                  allowNull: false,
                  type: Sequelize.DATE
                },
                updatedAt: {
                  allowNull: false,
                  type: Sequelize.DATE
                }
              })
              .then(function() {
                return queryInterface
                  .createTable("InterestMasters", {
                    id: {
                      allowNull: false,
                      autoIncrement: true,
                      primaryKey: true,
                      type: Sequelize.INTEGER
                    },
                    interestValue: {
                      allowNull: false,
                      type: Sequelize.STRING
                    },
                    createdAt: {
                      allowNull: false,
                      type: Sequelize.DATE
                    },
                    updatedAt: {
                      allowNull: false,
                      type: Sequelize.DATE
                    }
                  })
                  .then(function() {
                    return queryInterface.createTable("UserInterests", {
                      id: {
                        allowNull: false,
                        autoIncrement: true,
                        primaryKey: true,
                        type: Sequelize.INTEGER
                      },
                      userId: {
                        type: Sequelize.INTEGER,
                        references: {
                          model: "Users",
                          key: "id"
                        },
                        allowNull: false
                      },
                      interestId: {
                        type: Sequelize.INTEGER,
                        references: {
                          key: "InterestMasters",
                          value: "id"
                        },
                        allowNull: false
                      },
                      createdAt: {
                        allowNull: false,
                        type: Sequelize.DATE
                      },
                      updatedAt: {
                        allowNull: false,
                        type: Sequelize.DATE
                      }
                    });
                  });
              });
          });
      });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable("InterestMasters").then(function() {
      return queryInterface.dropTable("Interests").then(function() {
        return queryInterface.dropTable("companyDetails").then(function() {
          return queryInterface
            .dropTable("DesignationMasters")
            .then(function() {
              return queryInterface.dropTable("Users");
            });
        });
      });
    });
  }
};

【问题讨论】:

    标签: node.js express sequelize.js sequelize-cli


    【解决方案1】:

    options 参数中使用validate 函数:

    {
      validate: {
        endYearIsAtLeastStartYear() {
          if (this.endYear < this.startYear) {
            throw new Error('End year must be equal to or higher than start year')
          }
        }
    }
    

    【讨论】:

    • 这不是我尝试删除 startYear 的错误,然后它给了我错误“替换”未定义
    • 如果我为多个表使用多个迁移文件,那么如何控制表创建,因为表使用外键,因此必须在它们之前创建以前的表,我如何指定首先进行哪些迁移并稍后执行依赖迁移
    猜你喜欢
    • 2021-06-05
    • 2020-07-12
    • 2021-03-11
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    相关资源
    最近更新 更多