2016-09-27 2 views
0

확인과 모델을 업데이트하는 방법을, 나는 내 컨트롤러 중 하나에 다음을 가지고 :이 단계에서 user[0] 콘솔 경우는 항해 JS

User.find({email: '[email protected]'}).then(function (user) { 

    user[0].field = 'new_value'; 
    user[0].field_2 = 'new_value'; 
    console.log(user[0], 'before saving'); 
    user[0].save(); 
    console.log(user[0], 'after saving'); 

}); 

내가 업데이트 된 필드를 볼 수 있습니다. 그러나 변경 내용은 db에 저장되지 않았습니다. 다음 작업을 수행 할 경우 ...

User.find({email: '[email protected]'}).then(function (user) { 

    user[0].field = 'new_value'; 
    user[0].field_2 = 'new_value'; 
    user[0].save(); 

    User.find(user[0].id).then(function (updateduser) { 

    console.log(updateduser[0]) 

    }); 

}); 

updateduser 업데이트 된 필드가없는 이유는 무엇입니까? 이 경우 어떻게해야합니까?

답변

1

updated()을 사용하지 않는 이유는 무엇입니까? . 당신이 (User.find에 대해 수행 한 것처럼

User.find({ email: '[email protected]' }) 
    .then(function(user) { 
     if (!user) return res.notFound(); 

     User.update({ eamil: '[email protected]' }, { 
       field: 'new_value', 
       field_2: 'new_value' 
      }) 
      .then(function(updated_user) { 
       console.log(updated_user); 
       return res.ok(); 
      }) 
      .catch(function(err) { 
       sails.log.error(err); 
       return res.serverError(); 
      }); 
    }) 
    .catch(function(err) { 
     sails.log.error(err); 
     return res.serverError(); 
    }); 
2

사실

user[0].save(); 

)는 (다음) 약속을 반환합니다;

사용자 [0] .save()는 비동기 호출이므로 데이터베이스에서 사용자 [0]이 업데이트되지 않은 경우에도 사용자를 찾기위한 다음 호출이 실행됩니다.

그래서 두 번째 찾기 명령을 save() 함수의 안에 넣으면 업데이트 된 사용자가 표시됩니다.

user[0].save().then(function(err){ 

    User.find(user[0].id).then(function (updateduser) { 
    console.log(updateduser[0]) 
    }); 
})) 
0

우선, 사용자 [0] (내가 생각하는)를 사용하기 때문에 하나의 사용자 데이터 만 업데이트하려고합니다.

그래서 findOne()을 사용하기 쉽습니다.

User 
    .findOne({email: '[email protected]'}) 
    .exec(function(err,user){ 
     if(err || !user) { 
     //handle here 
      } 
     else { 
      user.key1 = 'new_value'; 
      user.key2 = 'new_value'; 
      user.save(function(err){ 
        if(err){ 
           //handle error 
          } 
        console.log('updatedUser',user) 
       }) 
      } 

    }) 

간단한 코드 감사합니다.