iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0

如果我們打錯資料想要更新資料的時候,就要用PUT。
下面是PUT route的程式碼

app.put("/animals/:_id", async (req, res) => {
  try {
    let {_id} = req.params;
    let { name, age, species } = req.body;
    let newAnimal = await Animal.findOneAndUpdate(
      { _id },
      { name, age, species },
      { new: true, runValidators: true, overwrite: true }
    );


    return res.send({
      msg: "資料更新成功",
      updatedAnimal: newAnimal,
    });
  } catch (e) {
    console.log(e);
    return res.status(400).send("更新資料發生錯誤");
  }
});

解說:
findOneAndUpdate裡面的內容:

  • { _id: id } 是查詢條件,表示根據 _id 欄位尋找對應的動物。
  • { name, age, species } 是要更新的內容,包括動物的名字、年齡和物種。
  • { new: true, runValidators: true, overwrite: true } 是更新選項,其中 new: true 表示返回更新後的動物資料,runValidators: true 表示在更新時執行驗證規則,overwrite: true 表示完全替換原有的資料。(因為這樣才會符合HTTP的PUT Method)

我們想要更改Oscar的age為五,可以把HTTP Method改成PUT,animals/後面放入id,然後把age的value設為5。
按送出之後就會發現成功把oscar的age更新為五。

https://ithelp.ithome.com.tw/upload/images/20230916/20161799F1Z7pk5Kst.png
但要注意這邊如果資料輸入不完整,還是會直接蓋過原本的,變成這樣。因為PUT就需要客戶端提供所有數據,所以會直接覆蓋。
https://ithelp.ithome.com.tw/upload/images/20230916/20161799FvIqIOP7F5.png


上一篇
day24 - GET
下一篇
day26 - PATCH
系列文
一起進入網頁後端的世界吧 Restful Api 啟動 !30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言