質問の概要:概念的には、ゲッターとセッターとは何で、なぜそれらを使用するのですか?
モデルで「object-property」ゲッターおよびセッター関数を定義することが可能です。これらは、データベースフィールドにマップする「保護」プロパティと「疑似」プロパティの定義の両方に使用できます。
「保護」とはどういう意味ですか?何に対して?
「疑似」プロパティとは何ですか?
以下のコード例にも苦労しています。 「タイトル」を2回設定しているようです。そして、引数「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! */ },
}
});
「マジックを行う」の代わりに具体的な例をいただければ幸いです!
疑似プロパティ
ユーザーの観点からは、オブジェクトの通常のプロパティのように見えますが、データベースには存在しないプロパティになります。たとえば、名と姓のフィールドを持つユーザーオブジェクトを考えてみます。次に、フルネームセッターを作成できます。
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)
ユーザーのフルネームを表示します。次に、ゲッターがバックグラウンドで呼び出されます。
同様に、フルネームのセッターメソッドを定義すると、
user.fullName = 'John Doe'
次に、渡された文字列を2つの部分に分割し、姓名で保存します。 (上記の簡略化された例を参照)
プロパティを保護する
@ahiipsaはこの良い例をすでに提供しています。 getterはuser.toJSON()を実行すると呼び出されるため、getterを使用して、機密データをユーザーに送信する前に簡単に削除できます。