问题摘要:从概念上讲,什么是吸气剂和制定者以及我们为什么要使用它们?
可以在模型上定义“对象属性”getter和setter函数,这些函数既可用于映射到数据库字段的“保护”属性,也可用于定义“伪”属性。
“保护”是什么意思?反对什么?
'psuedo'属性是什么?
我也在努力使用下面的示例代码。我们似乎两次设置'标题'。什么是'v'的论点?
见下文:
var Foo = sequelize.define('Foo', {
title: {
type : Sequelize.STRING,
allowNull: false,
}
}, {
getterMethods : {
title : function() { /* do your magic here and return something! */ },
title_slug : function() { return slugify(this.title); }
},
setterMethods : {
title : function(v) { /* do your magic with the input here! */ },
}
});
非常感谢一个具体的例子,而不是“做魔术”!
答案 0 :(得分:29)
伪属性
属性是,从用户的角度来看,似乎是对象的常规属性,但在数据库中不存在。例如,具有名字和姓氏字段的用户对象。然后,您可以创建一个全名设置器:
var foo = sequelize.define('foo', {
..
}, {
getterMethods: {
fullName: function () {
return this.getDataValue('firstName') + ' ' + this.getDataValue('lastName')
}
},
setterMethods: {
fullName: function (value) {
var parts = value.split(' ')
this.setDataValue('lastName', parts[parts.length-1])
this.setDataValue('firstName', parts[0]) // this of course does not work if the user has several first names
}
}
})
如果您有用户对象,则只需执行
即可console.log(user.fullName)
查看用户的全名。然后在幕后调用getter。
类似地,如果你为全名定义一个setter方法,你可以做
user.fullName = 'John Doe'
然后将传递的字符串分成两部分并将它们保存在名字和姓氏中。 (参见上面的简化示例)
保护属性
@ahiipsa已经提供了一个很好的例子。执行user.toJSON()时会调用getter,因此您可以使用getter轻松删除敏感数据,然后再将其发送给用户。
答案 1 :(得分:0)
@Column({
type: DataType.STRING,
set : function (this: User, value: string) {
this.setDataValue("password", cryptService.hashSync(value));
}
})
password: string;
This is the snippet which is used to store hashed password in database in
place of normal string.