2016-07-17 4 views
6

sequelize 인스턴스에 속성을 추가하기 전에 클라이언트에 다시 전달하려고합니다.Sequelize FindOne이 반환 한 객체에 속성 추가

router.get('/cats/1', function (req, res) { 
    Cat.findOne({where: {id: 1}}) 
     .then(function (cat) { 
      // cat exists and looks like {id: 1} 
      cat.name = "Lincoln"; 
      // console.log of cat is {id: 1, name: Lincoln} 
      res.json(cat); 
     }); 
}); 

클라이언트는 단지의 {id: 1} 아니라 새로 추가 된 키를 참조하십시오.

  • 여기 무슨 일이 일어나고 있습니까?
  • Sequelize에서 반환하는 개체 유형은 무엇입니까?
  • 고양이에 새 속성을 추가하고 다시 보낼 수있는 방법은 무엇입니까?
+0

반환 된 개체는 일반 개체가 아니라 모달 인스턴스입니다. [데이터 검색/찾기] (http://docs.sequelizejs.com/en/latest/docs/models-usage/)를보십시오 – DavidDomain

+0

DB에 새로운 인스턴스를 저장하고 싶지 않습니다. 'res.json (cat)'에'cat' 인스턴스에 추가하는 새로운 속성을 포함 시키길 원할뿐입니다. – Rastalamm

답변

7

Sequelize Model 클래스 (이 중 당신의 고양이 인스턴스) res.json은 아마도 당신의 고양이에는 직렬화하는 데 사용하는 toJSON() 방법이있다. 이 메서드는 모델에 정의 된 특성 만 사용하는 Model#get() (https://github.com/sequelize/sequelize/blob/95adb78a03c16ebdc1e62e80983d1d6a204eed80/lib/model.js#L3610-L3613)의 결과를 반환합니다. 또한

sequelize.define('Cat', { 
    // [other columns here...] 
    name: Sequelize.VIRTUAL 
}); 

당신이 속성을 추가하지 않으려면 : 당신이 고양이의 이름을 설정하지만, DB에 이름을 저장하지 할 수있게하려면 당신의 고양이 모델을 정의 할 때, 당신은 가상 열을 사용할 수 있습니다 모델 정의에 :

cat = cat.toJSON(); // actually returns a plain object, not a JSON string 
cat.name = 'Macavity'; 
res.json(cat); 
+0

이것이 작동하는 동안, 이것이 최선의 접근 방법처럼 보이지 않습니다 .. 나는 새 키를 할당하고 수정 된 객체를 전달하여 객체를 수정하려고합니다. 원래의 키/값 쌍 + 새 키/값 쌍 (DB 인스턴스 대신)을 클라이언트에 보냅니다. – Rastalamm

+0

궁금합니다. DB 검색 후 속성을 추가하는 용도는 무엇입니까? 가상 속성을 추가하는 것이 DB에 너무 가깝기 때문에 잘못된 위치에서 작업을 수행하고 싶다면 Sequelize 인스턴스를 방금 생성 한 데이터 객체를 모델링하는 편리한 방법으로 생각해보십시오. 데이터 베이스. 내가 목표를 달성하기 위해 생각할 수있는 또 다른 유일한 방법은'cat.toJSON()'(실제로 json 문자열이 아닌 객체를 반환 함)을 호출하고 사용자 정의 속성을 설정하는 것입니다. –

+0

'cat.toJSON()'에 대한 귀하의 제안이 저에게 꼭 맞는 것 같아요. 유스 케이스는 다음과 같습니다. 일부 DB 정보를 가져 와서 출력에 수학 함수를 실행 한 다음 클라이언트에 원래 숫자와 수학 함수의 출력과 관련된 몇 가지 새로운 속성을 반환합니다. – Rastalamm

관련 문제