【问题标题】:Sequelize: Unhandled rejection TypeError: admin.hasOperation_sav is not a function续集:未处理的拒绝类型错误:admin.hasOperation_sav 不是函数
【发布时间】:2020-06-11 06:44:06
【问题描述】:

operation_sav模型定义如下:

operation_sav.js

module.exports = function(sequelize, DataTypes) {
  var operation_sav = sequelize.define(
    "operation_sav",
    {
      id: {
        type: DataTypes.INTEGER,
        primaryKey: true,
        allowNull: false,
        autoIncrement: true,
        unique: true
      },
      nom_operation: DataTypes.STRING,
      status: {
        type: DataTypes.ENUM(
          "en_cours_livraison",
          "en_reparation",
          "repare",
          "expedie"
        ),
        defaultValue: "en_cours_livraison"
      },
      num_serie: DataTypes.STRING,
      address_mac: DataTypes.STRING,
      sous_garantie: DataTypes.BOOLEAN,
      description: DataTypes.STRING,
      adminId: DataTypes.INTEGER,
      produitId: DataTypes.INTEGER,
      status: {
        type: DataTypes.ENUM(
          "produit_recu",
          "en_livraison",
          "en_reparation",
          "repare",
          "en_expedition",
          "expedie",
          "annule"
        ),
        defaultValue: "produit_recu"
      }
    },
    { timestamps: true }
  );

  return operation_sav;
};

注意有一个外部外键 adminId Admin表和Operation_sav表的关系定义如下:

  /** admin Has Many operation_sav*/
  model.operation_sav.belongsTo(model.admin, {
    foreignKeyConstraint: true,
    onDelete: "cascade"
  });

  model.admin.hasMany(model.operation_sav, {
    foreignKeyConstraint: true,
    onDelete: "cascade"
  });

这是在 Operation_sav 表中创建一行的函数:

var createSavOperation = function(operationInformation) {
  return models.operation_sav.create(operationInformation);
};

我用它来创建这一行:

{
    "id": 4,
    "nom_operation": "Répartion viwone plus",
    "status": "produit_recu",
    "num_serie": "5525ggffdd",
    "address_mac": "ff:ff:ff:ff:ff",
    "sous_garantie": true,
    "description": "Panne bouton droit",
    "adminId": 10,
    "produitId": 6,
    "updatedAt": "2020-02-27T09:22:47.430Z",
    "createdAt": "2020-02-27T09:22:47.430Z"
}

请注意 adminId 为 10 而 operation_savId 为 4。所以我尝试通过运行这段代码来查看整个关联是否正常工作:

  models.operation_sav.findByPk(4).then(operation_sav => {
    admin = models.admin.findByPk(10);
    admin.hasOperation_sav(operation_sav);
  });

但是,我得到了这个错误:

未处理的拒绝类型错误:admin.hasOperation_sav 不是 功能

这是因为我在创建 operation_sav 行时手动写入了 adminId 值吗?

编辑 1: 当我添加此 console.log 行时:

  admin = models.admin.findByPk(10);
    console.log(admin instanceof models.admin); // false!!
    admin.hasoperation_sav(operation_sav);

我得到 false 这没有任何意义,但它有点解释了为什么 sequelize 没有抛出 admin.hasoperation_sav is not a function 错误..
EDIT 2:我已经修复了 EDIT 1 像这样:

 models.admin.findByPk(10).then(adminFound => {
      console.log(
        "admin is instance of models.admin",
        adminFound instanceof models.admin
      ); // true
      adminFound.hasoperation_sav(operation_sav);
    });

但是,hasoperation_sav 仍然无法识别为函数。

【问题讨论】:

    标签: node.js postgresql express orm sequelize.js


    【解决方案1】:

    我已经这样解决了:

      models.operation_sav.findByPk(4).then(operation_sav => {
        models.admin.findByPk(10).then(adminFound => {
          console.log(
            "admin is instance of models.admin",
            adminFound instanceof models.admin
          );
          // admin is instance of models.admin true
          adminFound.hasOperation_sav(operation_sav).then(result => {
            console.log("admin has operation sav", result);
            //admin has operation sav true
          });
        });
      });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-02
      • 2017-07-15
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      相关资源
      最近更新 更多