使用sequelize在mySql中定义静态函数(如在mongoose中)

时间:2017-04-17 12:18:24

标签: mysql node.js mongodb sequelize.js

尝试在模型中定义一个函数,这样我就可以拥有一组通用的函数。这是我的表的代码。我正在使用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不是函数

2 个答案:

答案 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不同。

classMethodsinstanceMethods选项已从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 () {..}