簡體   English   中英

使用 Express.JS 刪除

[英]DELETE with Express.JS

我正在嘗試讓我的 DELETE 方法起作用。 當 function 運行時,它會直接進入 throw Error 行。 在控制台中,它正在打印以下兩個錯誤。 “404 未找到” “錯誤未捕獲(承諾中)錯誤”

這是我的客戶端代碼

async function deleteItem(item) {
  let requestOptions = {
    method: "DELETE",
    headers: { "Content-Type": "application/json" },
  }

  const response = await fetch("/delete/:id", requestOptions);
  if (response.status != 204) {
    throw Error("Cannot delete your item from list");
  }
  return item;
}

和服務器端代碼

app.delete("/delete/:id"),
  async (request, res) => {
    try {
      await Item.deleteOne({ _id: request.params.id });
      res.sendStatus(204);
    } catch {
      res.sendStatus(404);
      console.log('test');
    }
  };

您需要在客戶端代碼中傳遞要刪除的“事物”的 ID。

async function deleteItem(item) {
  let requestOptions = {
    method: "DELETE",
    headers: { "Content-Type": "application/json" },
  }

  const response = await fetch("/delete/:id", requestOptions); // <----- HERE! 
  if (response.status != 204) {
    throw Error("Cannot delete your item from list");
  }
  return item;
}

它應該類似於(假設item object 具有 id)

const response = await fetch(`/delete/${ item.id }`, requestOptions);

例如: /delete/12423

您沒有捕獲從fetch() function 返回的 promise 導致它拋出錯誤。 此外,您似乎沒有發送帶有有效 ID 的請求。 你可以通過這樣做來解決這個問題

fetch(...).then((response) => {
    if (response.status != 204) {
      throw Error("Cannot delete your item from list");
    }
}).catch((err) => {
    console.error(err); // handle error
});

或者

const response = await fetch(...).catch((err) => {
    console.error(err); // handle error
});
// if the promise is rejected and the catch block is executed then 'response' will be undefined
if (!response) return;
if (response.status != 204) {
    throw Error("Cannot delete your item from list");
}

編輯:或者當然你無法捕捉到 promise 拒絕,只需發送帶有有效 ID 的請求

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM