繁体   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