使用 sequelize 在 mySql 中定义静态函数(如在 mongoose 中)
Posted
技术标签:
【中文标题】使用 sequelize 在 mySql 中定义静态函数(如在 mongoose 中)【英文标题】:defining statics function (like in mongoose) in mySql using sequelize 【发布时间】:2017-09-13 01:32:34 【问题描述】:尝试在模型中定义一个函数,以便我可以拥有一组通用的函数。这是我的表格代码。我正在使用 sequelize ORM 和 nodejs
"use strict";
module.exports = function(sequelize, DataTypes)
var AttendantUser = sequelize.define('AttendantUser',
user_id :
type : DataTypes.CHAR(36),
defaultValue : DataTypes.UUIDV4,
primaryKey : true
,
mobile :
type : DataTypes.BIGINT,
allowNull : false,
unique : true
,
reset_code :
type : DataTypes.INTEGER,
allowNull : true,
defaultValue : '0000'
,
freezeTableName : true,
paranoid : true
);
AttendantUser.usernameInUse = function (callback)
console.log("fefe");
callback(null, "hello");
return AttendantUser;
;
我尝试使用 usernameInUse 函数时遇到的错误是 . 错误:mModels.usernameInUse 不是函数
【问题讨论】:
你检查过 Hooks 吗? docs.sequelizejs.com/en/v3/docs/hooksmModels
变量是什么?
【参考方案1】:
这就是 classMethods 的用途。在Sequelize documentation page 中查找选项“[options.classMethods]”。
您的代码必须是这样的:
"use strict";
module.exports = function(sequelize, DataTypes)
var AttendantUser = sequelize.define('AttendantUser',
user_id :
type : DataTypes.CHAR(36),
defaultValue : DataTypes.UUIDV4,
primaryKey : true
,
mobile :
type : DataTypes.BIGINT,
allowNull : false,
unique : true
,
reset_code :
type : DataTypes.INTEGER,
allowNull : true,
defaultValue : '0000'
,
freezeTableName : true,
paranoid : true,
classMethods :
usernameInUse = function (callback)
console.log("fefe");
callback(null, "hello");
return this;
);
与数据库同步后,即可导入模型
AttendantUser = require('/path/to/attendant-user');
然后你可以像这样调用静态方法:
AttendantUser.usernameInUse(() => console.log('callback called.');)
【讨论】:
【参考方案2】:在Sequelize V4。它看起来与 V3 不同。
classMethods
和 instanceMethods
选项已从 sequelize.define 中删除。 Sequelize 模型现在是 ES6 类。您可以像这样设置类/实例级别的方法:
旧
const Model = sequelize.define('Model',
...
,
classMethods:
associate: function (model) ...
,
instanceMethods:
someMethod: function () ...
);
新
const Model = sequelize.define('Model',
...
);
// Class Method
Model.associate = function (models)
...associate the models
;
// Instance Method
Model.prototype.someMethod = function () ..
【讨论】:
这个问题应该被标记为答案......另一个太老了,我遇到了很多麻烦......你能结束一个链接到讨论这个问题的文档吗?因为我没找到:c @nishi 已更新以上是关于使用 sequelize 在 mySql 中定义静态函数(如在 mongoose 中)的主要内容,如果未能解决你的问题,请参考以下文章