gpt4 book ai didi

mysql - Sequelize 说 instanceMethod 未定义

转载 作者:行者123 更新时间:2023-11-29 20:54:18 24 4
gpt4 key购买 nike

我正在使用sequelize 连接到mysql 数据库进行开发。我有一个名为 Dealer 的模型:

'use strict';
module.exports = function(sequelize, DataTypes) {
var Dealer = sequelize.define('Dealer', {
id: { allowNull: false, autoIncrement: true,
primaryKey: true, type: DataTypes.INTEGER.UNSIGNED },
...
created_at: { allowNull: false, type: DataTypes.DATE },
updated_at: { allowNull: false, type: DataTypes.DATE }
},
{underscored: true},
{
classMethods: {
associate: function(models) {
Dealer.hasMany(models.Job);
}
},
instanceMethods: {
getAllClientData: function(){
leads = [];
...
return leads;
},
}
});
return Dealer;
};

当我尝试对 DealerController.js 文件中的 Sequelize 查询返回的对象调用实例方法时:

dealer.getAllClientData()

我收到错误:

Unhandled rejection TypeError: dealer.getAllClientData is not a function

当我将返回的 JSON 打印到控制台时,其内容如下:

{ dataValues: 
{ id: 1,
....
}
...
'$modelOptions':
{ timestamps: true,
instanceMethods: {},
classMethods: {},
validate: {},
freezeTableName: false,
underscored: true,
underscoredAll: false,
paranoid: false,
rejectOnEmpty: false,
whereCollection: { id: '1' },
schema: null,
schemaDelimiter: '',
defaultScope: {},
scopes: [],
hooks: {},
indexes: [],
name: { plural: 'Dealers', singular: 'Dealer' },
omitNul: false,
...
}
...
}

显然我的instanceMethod没有定义,并且根据sequelize docs我也应该有可用的 getter 和 setter。

我不明白我在这里错过了哪一步,因为我已经阅读了许多 Sequelize 文档,甚至使用他们的 cli 来生成模型和迁移。

有什么想法吗?

编辑:

以下是经销商要记录的输出内容。原型(prototype)

{ _customGetters: {},
_customSetters: {},
validators: {},
_hasCustomGetters: 0,
_hasCustomSetters: 0,
rawAttributes:
{ id:
{ allowNull: false,
autoIncrement: true,
primaryKey: true,
type: [Object],
Model: Dealer,
fieldName: 'id',
_modelAttribute: true,
field: 'id' },
///Other Attributes
},
_isAttribute: { [Function] cache: MapCache { __data__: [Object] } },
Model: Dealer,
$Model': Dealer }

最佳答案

在进一步阅读文档并查看其他一些模型定义后,我发现问题是我错误地定义了模型。

在我上面的定义中,您会注意到我将 underscored: true 选项括在括号中,然后将我的 classMethods 和 instanceMethods 括在另一组括号中。

这是不正确的。定义sequelize模型的正确方法是使用两组括号,第一组包含模型属性,第二组包含所有其他选项,包括方法。

'use strict';
module.exports = function(sequelize, DataTypes) {
var Dealer = sequelize.define('Dealer', {
id: { allowNull: false, autoIncrement: true,
primaryKey: true, type: DataTypes.INTEGER.UNSIGNED },
...
created_at: { allowNull: false, type: DataTypes.DATE },
updated_at: { allowNull: false, type: DataTypes.DATE }
},
{
underscored: true,
classMethods: {
associate: function(models) {
Dealer.hasMany(models.Job);
}
},
instanceMethods: {
getAllClientData: function(){
leads = [];
...
return leads;
},
}
});
return Dealer;
};

关于mysql - Sequelize 说 instanceMethod 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37754464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com