Sequelize:未处理的拒绝类型错误:admin.hasOperation_sav不是函数



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

注意有一个外部外键adminIdAdmin和表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:当我添加此控制台时。日志行:

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

我得到了false,这没有任何意义,但它在某种程度上解释了为什么sequelize没有抛出管理员。asoperation_sav不是一个函数错误
编辑2:我修复了编辑器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仍然不能被识别为函数。

我已经这样解决了:

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

最新更新