使用Express.JS删除



我正在尝试使DELETE方法工作。当函数运行时,它会直接进入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');
}
};

您需要传递;事物;要在客户端代码中删除的。

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对象具有id(

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

例如:/delete/12423

您没有捕获fetch()函数返回的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");
}

编辑:或者你当然不能捕捉到承诺被拒绝,只发送带有有效id 的请求

最新更新