2016-09-27 5 views
0

[OK]をクリックしてモデルを更新する方法、私は私のコントローラのいずれかで、次の持っている:私はこの段階で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()関数のthenの中に2番目のfindコマンドを入れて、更新されたユーザーを取得します。

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

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

まず、ユーザー[0](私は思う)を使用しているため、1つのユーザーデータのみを更新したいとします。

したがって、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) 
       }) 
      } 

    }) 

シンプルなコードは、ありがとうございます。

関連する問題