问题摘要: 从概念上讲,什么是 getter 和 setter,我们为什么要使用它们?
摘自 http://docs.sequelizejs.com/en/latest/docs/models-definition/?highlight=getterMethods#getters-setters :
我也在为下面的示例代码苦苦挣扎。我们似乎两次设置“标题”。什么是参数“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! */ },
}
});
一个具体的例子而不是“做魔术”将不胜感激!
最佳答案
将是属性,从用户的角度来看似乎是对象的常规属性,但不存在于数据库中。以具有名字和姓氏字段的用户对象为例。然后你可以创建一个全名 setter :
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 在将敏感数据发送给用户之前轻松删除敏感数据。
关于node.js - sequelize getter 和 setter 是如何工作的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21949554/