Sequelize classMethods vs instanceMethods
Sequelize classMethods vs instanceMethods
因此,开始我的冒险,进入所有事物节点。我尝试学习的工具之一是Sequelize。所以我将开始我试图做的事情:
'use strict';
var crypto = require('crypto');
module.exports = function(sequelize, DataTypes) {
var User = sequelize.define('User', {
username: DataTypes.STRING,
first_name: DataTypes.STRING,
last_name: DataTypes.STRING,
salt: DataTypes.STRING,
hashed_pwd: DataTypes.STRING
}, {
classMethods: {
},
instanceMethods: {
createSalt: function() {
return crypto.randomBytes(128).toString('base64');
},
hashPassword: function(salt, pwd) {
var hmac = crypto.createHmac('sha1', salt);
return hmac.update(pwd).digest('hex');
},
authenticate: function(passwordToMatch) {
return this.hashPassword(this.salt, passwordToMatch) === this.hashed_pwd;
}
}
});
return User;
};
我对什么时候使用classMethods
和instanceMethods
感到困惑。对我来说,当我想到createSalt()
和hashPassword()
应该是类方法。它们是通用的,在大多数情况下与特定的实例没有任何关系,它们只是通用的。但是当我在classMethods
中有createSalt()
和hashPassword()
时,我不能从instanceMethods
调用它们。
我尝试过以下的变体:
this.createSalt();
this.classMethods.createSalt();
createSalt();
下面这样的东西不起作用,我可能只是不理解一些简单的东西。
authenticate: function(passwordToMatch) {
console.log(this.createSalt());
return this.hashPassword(this.salt, passwordToMatch) === this.hashed_pwd;
}
任何提示/提示/指导都将不胜感激!
所有不修改或检查任何类型实例的方法都应该是classMethod
,其余的是instanceMethod
例如:
// Should be a classMethods
function getMyFriends() {
return this.find({where{...}})
}
// Should be a instanceMethods
function checkMyName() {
return this.name === "george";
}
尽管最基本的是,当您想要修改instance
(遍历行)时,应该使用instance
方法。我宁愿不使用class
(遍历表)本身的方法来污染classMethods
。
在你的例子中,我会把hashPassword
函数放在你的类之外,并把它作为助手函数放在我的实用程序模块中(或者为什么不是同一个模块,而是作为一个普通定义的函数)。。。像
var hashPassword = function(...) { ... }
...
...
instanceMethods: {
authenticate: function( ... ) { hashPassword( ... ) }
}
我发现这对我来说是有效的,从3.14 开始
var myModel = sequelize.define('model', {
}, {
classMethods: {
someClassMethod: function() {
return true;
}
}, {
instanceMethods: {
callClassMethod: function() {
myModel.someClassMethod();
}
}
});
相关文章:
- setInteval vs setTimeout
- $(this).prop('property') vs. this.property
- Js.erb VS按钮标记-不'不起作用.为什么?
- reactjs this.refs vs document.getElementById
- Performance: NaCl vs Emscripten
- 文本表示法VS.构造函数,用于在JavaScript中创建对象
- Advantages to DOMParser vs template & innerHTML
- JavaScript-===vs===运算符性能
- 开发第三方小部件-Angular vs jQuery vs普通的旧JS
- PhantomJS(vs nightwatch.js)设置cookie错误
- Javascript events: window.event vs argument reference (funct
- 需要确认我对Servlet vs RESTful网页的理解's的差异
- "#"keyCode=222 vs 51(Chrome与Android版Chrome)-为什么有区别
- .notion vs.[]notation |插入到文本对象中
- Javascript-使用“”将toDateStringMonth从文本字符串解析为数字字符串;如果“;vs“;开关”;
- 没有框架/DLL的VS Web应用程序项目
- Eval vs execscript
- VS代码:在<脚本>标签
- Object.prototype.hasOwnProperty.call() vs Object.prototype.h
- Sequelize classMethods vs instanceMethods