尝试在模型中定义一个函数,这样我就可以拥有一组通用的函数。这是我的表的代码。我正在使用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不是函数
答案 0 :(得分:2)
这就是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.');})
答案 1 :(得分:0)
在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 () {..}