2016-11-12 10 views
0

私は一緒にまとめたExpress Mongoose APIを持っています。私がPUTエンドポイントを使用するとき、私が変更するすべてのフィールドを持つすべてのパラメーターを渡す必要があります。私がちょうど1つを渡すと、他のすべてのフィールドは空白になります。update/mongoosdに渡されたパラメータのみが更新されます

ファーストネーム::文字列、 姓:文字列、 電子メール:文字列、 postedon:日、 コメント:文字列、 率:数

例えば

、のは、私は次のコレクションを持っているとしましょう

マイPUTコードは次のようになります。私は私の文書の更新、その後、新たな第一名のみを入力した場合

.put(function(req, res){ 

    Guestbook.findById(req.params.id, function(err, guestbook){ 

    if(err) 
     res.send(err); 

    //UPDATE 
    guestbook.firstname = req.body.firstname; 
    guestbook.lastname = req.body.lastname; 
    guestbook.email = req.body.email; 
    guestbook.postedon = req.body.postedon; 
    guestbook.comment = req.body.comment; 
    guestbook.rate = req.body.rate; 

    guestbook.save(function(err){ 

     if(err) 
     res.send(err); 

     res.json(guestbook); 

    }); 

    }); 

}) 

新しい名前と他のすべてのフィールドは削除されます。

更新時に1つまたは2つのパラメータを渡し、それらのフィールドのみを変更し、もう一方を空白にしない方法がありますか?

+0

以下のロジックで同じことを試すことができます – Aruna

答えて

0

Object.keysと同じように試してみて、以下のようにundefinedを確認してください。したがって、変更されたものだけを渡すことができ、他のパラメータを渡す必要はありません。

.put(function(req, res){ 

    Guestbook.findById(req.params.id, function(err, guestbook){ 

    if(err) 
     res.send(err); 

    //UPDATE 
    Object.keys(req.body).forEach(function(prop) { 
     if(typeof req.body[prop] !== 'undefined') { 
      guestbook[prop] = req.body[prop]; 
     } 
    }); 

    guestbook.save(function(err){ 

     if(err) 
     res.send(err); 

     res.json(guestbook); 

    }); 

    }); 

}); 
関連する問題