2017-04-17 83 views
0

嘗試在模型中定義一個函數,以便我可以擁有一組通用函數。這裏是我的代碼表。我正在使用續集ORM和nodejs在mySql中使用sequelize定義靜態函數(如mongoose)

"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

你檢出了鉤子嗎? http://docs.sequelizejs.com/en/v3/docs/hooks/ –

+0

什麼是「mModels」變量? – piotrbienias

回答

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