[英]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.