首页 > 解决方案 > 无法从客户端向 Fastify 后端发出 PUT 请求

问题描述

我正在尝试通过向我的 Fastify 服务器发送 PUT 请求从客户端更新信息,但没有发送任何内容。也没有显示错误,只是没有变化。

POST 和 GET 请求在客户端可以正常工作。

PUT 请求在 Insomnia/Postman 中工作。

我已经安装了 fastify-cors:

fastify.register(require("fastify-cors"), {
  origin: "*",
  methods: "GET,POST,PUT,PATCH,DELETE",
});

客户端请求

export default function EditUser({ route, navigation }) {
  const { item } = route.params;
  const [firstName, setFirstName] = useState(item.name[0].firstName);

  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",
        },
        body: firstName,
      });
      console.log(firstName);
    } catch (error) {
      console.log(error);
    }
  };

  return (
    <View>
      <Layout>
        <Text style={styles.text}>EDIT USER PAGE</Text>

        <View>
          <TextInput
            style={styles.input}
            onChangeText={(e) => setFirstName(e)}
            value={firstName}
          />
          <Text style={{ color: "#FFF" }}>{item._id}</Text>
          <Button title="save changes" onPress={editUser} />
        </View>
      </Layout>
    </View>
  );
}

后端路由


  fastify.put("/:id", async (request, reply) => {
    try {
      const { id } = request.params;
      const user = await User.findByIdAndUpdate(id, request.body);
      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" });
    }
  });

标签: javascriptreact-nativerestfastify

解决方案


检查后端日志,可能是您正在使用return reply.send. 删除return. 从文档

警告:

当同时使用 return value 和 reply.send(value) 时,发生的第一个优先,第二个 value 将被丢弃,并且还会发出警告日志,因为您尝试发送两次响应。


推荐阅读