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

客户端向Fastify后端发送PUT请求无响应无报错如何解决

问题根因

  1. 客户端请求体格式不符合要求:你指定了Content-Type: application/json请求头,但直接把firstName纯字符串传给了请求体,没有按照User模型的结构序列化为JSON对象,后端拿到的request.body无效,自然无法完成更新。
  2. 后端findByIdAndUpdate配置缺失:默认该方法返回更新前的旧文档,且会跳过模型字段校验,即使数据更新成功前端也可能拿到旧数据,无法判断更新结果。
  3. Postman可以正常调用是因为你在工具中填写了符合要求的JSON结构请求体,和客户端的错误请求格式不一致。

修复步骤

1. 调整客户端请求代码

修改fetch的body参数,按照你的用户数据结构序列化为JSON:

const editUser = async () => {
  try {
    const res = await fetch(`http://<myIPaddr>:5000/api/users/${item._id}`, {
      method: "PUT",
      headers: {
        Accept: "application/json",
        "Content-Type": "application/json",
      },
      // 按照你的User模型结构构造数据并序列化
      body: JSON.stringify({
        name: [{ firstName: firstName }]
      }),
    });
    // 添加响应处理,方便排查错误
    const result = await res.json();
    console.log('更新结果', result);
    console.log(firstName);
  } catch (error) {
    console.log(error);
  }
};

2. 调整后端路由代码

给findByIdAndUpdate添加配置项,可选新增日志和错误信息方便排查:

fastify.put("/:id", async (request, reply) => {
  try {
    // 可选:添加日志确认收到的请求体
    console.log('收到的请求数据', request.body);
    const { id } = request.params;
    const user = await User.findByIdAndUpdate(id, request.body, {
      new: true, // 返回更新后的最新文档
      runValidators: true // 开启模型字段校验,避免非法数据写入
    });
    if (!user) {
      return reply.status(400).send({ error: "couldn't find user" });
    }
    reply.status(200).send({ success: true, data: user });
  } catch (error) {
    reply.status(400).send({ error: "request failed", msg: error.message });
  }
});

内容的提问来源于stack exchange,提问作者Eric Pezzulo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:06:03