2016-11-12 21 views
0

我有一個Express Mongoose API,我把它放在一起。當我使用PUT端點時,必須將所有參數都傳遞給我更改的任何字段。如果我只通過一個,那麼所有其他領域都變成空白。只更新params傳遞給express/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); 

    }); 

    }); 

}) 

如果我只輸入一個新的直呼其名,然後在我的文檔與更新新名稱和所有其他字段被刪除。

有沒有辦法在更新時僅傳遞一個或兩個參數,只更改這些字段,而不會使其他字段變爲空白?

+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); 

    }); 

    }); 

});