2014-02-22 5 views
15

질문 요약 : 개념적으로 게터와 세터는 무엇이며 왜 우리가 사용합니까?getter 및 setter를 어떻게 sequelize합니까?

http://docs.sequelizejs.com/en/latest/docs/models-definition/?highlight=getterMethods#getters-setters에서

발췌 :

정의하는 모델 '객체 특성'게터와 세터 기능 할 수 있으며, 이러한 데이터베이스 필드에 매핑 속성을 '보호'과 정의를 모두 사용할 수 있습니다 '가상'속성.

  1. 는 '보호'가 무엇을 의미합니까? 맞서?

  2. '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! */ }, 
    } 
}); 

구체적인 예는 크게 감사하겠습니다!

답변

20

의사 속성

는 사용자의 관점은 개체의 일반 속성처럼 보인다에서, 속성 것이지만, 데이터베이스에 존재하지 않습니다. 예를 들어 이름과 성 필드가있는 사용자 개체를 예로 들어 보겠습니다. 당신은 당신이 할 수있는 사용자 개체가있을 때 단순히 사용자의 전체 이름을 보려면

console.log(user.fullName) 

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 
     } 
    } 
}) 

: 그런 다음 전체 이름 세터를 만들 수 있습니다. getter는 무대 뒤에서 호출됩니다. 당신은 전체 이름에 대한 setter 메소드를 정의하면

이와 비슷하게, 당신은 두 개의 부분으로 전달 된 문자열을 분할 할

user.fullName = 'John Doe' 

을 할 수있는 제 1 및 제 마지막 이름으로 저장합니다. (위의 간단한 예를 참조)

보호 속성

@ahiipsa 이미 좋은 예를 제공했다. getter는 user.toJSON()을 호출 할 때 호출되므로 getter를 사용하여 민감한 데이터를 사용자에게 보내기 전에 쉽게 제거 할 수 있습니다.

+1

1 월, findAll options.attributes에 의사 속성을 추가하면 오류가 발생하고 내 가상 속성이 데이터베이스에 존재하지 않는다고 표시됩니다. 이것은 나에게 의미가 있지만, Sequelize가 이것을 알고 나를 위해 그것을 처리한다고 가정합니다. 이것은 의도 한 행동입니까, 아니면 의사 속성을 선택하는 방법입니까? 나는 모든 의사 재산이 기본적으로 포함되어 있다고 생각합니다 .... –

관련 문제