You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中点击图标触发DELETE请求删除消息时路由失效求助

问题:点击删除图标时,删除消息的前后端交互失效

问题场景

点击删除图标触发消息删除操作时,前端发起的DELETE请求无法正常与后端路由交互,功能未按预期执行。

现有代码

前端代码

const handleTrash = (id) => {
    fetch(`http://localhost:3000/deleteTweet/${id}`, {
      method: "DELETE",
      // headers: { "Content-Type": "application/json" },
      // body: JSON.stringify({ id: tweet._id }),
    }).then((response => response.json()) => {
      console.log(response.status);
    });
    // .then((response) => response.json())
    // .then((data) => {
    //   console.log("data is", data);
    // })
    // .then((response) => response.json())
    // .then((data) => {
    //   setTrash(!trash);
    //   console.log("Delete :", reponse);
    // });
  };

后端路由代码

router.delete("/deleteTweet/:id", (req, res) => {
  // if (!checkUser(req.params.token)) {
  //   res.json({ results: false, error: "Missing or empty fields" });
  //   return;
  // }
  Tweet.deleteOne({ _id: req.params.id }).then(() =>
    res.json({ result: true })
  );
});

问题分析与修复方案

1. 前端fetch回调写法错误

你当前的then回调嵌套了多余的箭头函数,导致无法正确解析响应;同时注释掉的状态更新逻辑存在拼写错误(reponse应为response),且缺少错误捕获机制,无法排查请求失败原因。

修复后的前端代码:

const handleTrash = (id) => {
  fetch(`http://localhost:3000/deleteTweet/${id}`, {
    method: "DELETE"
  })
  .then(response => {
    // 先校验响应状态是否正常
    if (!response.ok) {
      throw new Error(`请求失败,状态码:${response.status}`);
    }
    return response.json();
  })
  .then(data => {
    console.log("删除结果:", data);
    // 触发状态更新,刷新消息列表
    setTrash(!trash);
  })
  .catch(error => {
    // 捕获请求或解析错误,便于排查问题
    console.error("删除请求出错:", error);
  });
};

2. 后端缺少错误处理逻辑

当前后端仅处理了删除成功的场景,未覆盖ID不存在、数据库异常等失败情况,无法给前端返回明确的错误反馈。

修复后的后端路由代码:

router.delete("/deleteTweet/:id", (req, res) => {
  // 可选:恢复用户权限校验(注意token通常放在请求头而非params中)
  // if (!checkUser(req.headers.authorization)) {
  //   return res.json({ result: false, error: "权限验证失败" });
  // }

  Tweet.deleteOne({ _id: req.params.id })
  .then(deletedResult => {
    // 检查是否真的删除了目标文档
    if (deletedResult.deletedCount === 0) {
      return res.json({ result: false, error: "未找到要删除的消息" });
    }
    res.json({ result: true });
  })
  .catch(dbError => {
    console.error("数据库删除操作出错:", dbError);
    res.json({ result: false, error: "删除失败,请稍后重试" });
  });
});

3. 额外排查点

  • 确认后端路由挂载路径:如果你的router是通过app.use('/api', router)挂载的,前端请求地址需改为http://localhost:3000/api/deleteTweet/${id}
  • 查看浏览器Network面板:检查DELETE请求的状态码、响应内容,确认请求是否到达后端、是否存在跨域问题
  • 校验ID格式:确保传入handleTrash的id是有效的MongoDB ObjectId格式

内容的提问来源于stack exchange,提问作者Ines Latrache

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 20:50:11