无法从客户端向 Fastify 后端发出 PUT 请求 [重复]

Posted

技术标签:

【中文标题】无法从客户端向 Fastify 后端发出 PUT 请求 [重复]【英文标题】:Can't make PUT requests from client side to Fastify backend [duplicate] 【发布时间】:2021-12-02 07:51:25 【问题描述】:

我正在尝试通过向我的 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" );
    
  );

【问题讨论】:

【参考方案1】:

检查后端日志,可能是您使用的是return reply.send。删除return。 From the docs:

警告:

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

【讨论】:

没有变化,真的很困惑为什么这不起作用【参考方案2】:

找到了解决办法,我没有以正确的方式传递数据

const editUser = async () => 
    const userEndpoint = `http:<myIPaddr>:5000/api/users`;
    try 
      const res = await axios(
        url: `$userEndpoint/$item._id`,
        method: "PUT",
        data: 
          name: 
            firstName: firstName,
          ,
        ,
      );
      console.log(firstName);
     catch (error) 
      console.log(error);
    
  ;

【讨论】:

以上是关于无法从客户端向 Fastify 后端发出 PUT 请求 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

无法从 reactjs 中的 axios 向 id=1 文章的 django REST API 后端发出 GET 请求

如何从后端向用户本地主机上的另一台服务器发出请求

Django CSRFToken 中间件附加到 URL 并在向服务器发出“PUT”请求后显示。 (AJAX 问题)

我无法向自己的 Spring 引导服务器发出 Angular Http 请求

如何从 ASP.NET 核心 mvc 向 asp.net 核心中的 Web API 发出 PUT 请求?

前端后端沟通说明