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