sequelize 上遇到的一些坑
var User = db.define('user', {
username: {type: Sequelize.STRING, allowNull: false, unique: 'compositeIndex'},
password: {type: Sequelize.STRING, allowNull: false, },
lastAt: {type: Sequelize.DATE, allowNull: false, defaultValue: Sequelize.NOW,},
roleType: {
type: Sequelize.INTEGER,
allowNull: false,
defaultValue: Enumeration.roleType[3].value,
},
},{
indexes: [
// Create a unique index on username,password
{
unique: true,
fields: ['username','password']
}
],
getterMethods : {
roleTypeTitle : function() { return Enumeration.roleType[this.roleType].title },
lastAtFormat : function() { return tools.formatDate(this.lastAt) },
createdAtFormat: function() { return tools.formatDate(this.createdAt) },
updatedAtFormat: function() { return tools.formatDate(this.updatedAt) },
},
})
var User = db.define('user', {
username: {type: Sequelize.STRING, allowNull: false, unique: 'compositeIndex'},
password: {type: Sequelize.STRING, allowNull: false, },
lastAt: {type: Sequelize.DATE, allowNull: false, defaultValue: Sequelize.NOW,},
roleType: {
type: Sequelize.INTEGER,
allowNull: false,
defaultValue: Enumeration.roleType[3].value,
},
},{
indexes: [
// Create a unique index on username,password
{
unique: true,
fields: ['username','password']
}
],
getterMethods : {
roleTypeTitle : () => Enumeration.roleType[this.roleType].title,
lastAtFormat : () => tools.formatDate(this.lastAt) ,
createdAtFormat: () => tools.formatDate(this.createdAt) ,
updatedAtFormat: () => tools.formatDate(this.updatedAt) ,
},
})
以上两段代码,折腾了一个晚上,第二段代码 使用es6的写法, 里面的this 对象 和 第一段代码中的this 对象不一样的。
请问,这里的getterMethods 如果用 es6的 写法,怎样去获取原来的那个this?
6 回复
@xadillax 我知道是 他的特性啊,当前代码块外的作用域为this嘛, 我的问题是 Sequelize 的这部分就不能用 箭头函数了吗?如果想用箭头函数,这里 怎样才可以获取到 Sequelize 的 实例对象
@thomas0836 这里不能用箭头函数,sequelize 的 model 在定义的时候并没有指向它实例的变量😳; 可以说 sequelize 实现 getter/setter 的这种写法就是利用 function 中 this 变化的特点; 另外这里有提到这个问题的 issue 。