Axios PUT请求-React

vojdkbi0  于 2022-12-23  发布在  iOS
关注(0)|答案(2)|浏览(180)

我想发送一个put请求来修改JSON文件的命令部分。

{
  "users": [
    {
      "hostname": "xxx.xxx.xxx.xx",
      "password": "password1",
      "command": "command1",
      "id": 1
    },
    {
      "hostname": "xxx.xxx.xxx.xx",
      "password": "password2",
      "command": "command2",
      "id": 2
    },
    {
      "hostname": "xxx.xx.xx.xxx",
      "password": "password3",
      "command": "command3",
      "id": 3
    }
  ]
}

在App.js中,我像这样发送put请求;

stopPC(id){        
            axios.put('http://localhost:3002/users/'+id,{
              command: 'stop'
            })   
  }

而且我已经试过了;

axios({
            method: 'put',
            url: 'http://localhost:3002/users/'+ id,
            data: {
              hostname: id.hostname,
              password: id.password,
              command:  'stop'
            }    
  });

在这两种情况下,我都在JSON文件中得到了以下输出。

{
  "users": [
    {
      "command": "stop",
      "id": 1
    },
    {
      "hostname": "xxx.xxx.xxx.xx",
      "password": "password2",
      "command": "command2",
      "id": 2
    },
    {
      "hostname": "xxx.xxx.xxx.xx",
      "password": "password3",
      "command": "command3",
      "id": 3
    }
  ]
}

我只想更改命令信息,同时保持主机名和密码信息不变。我不确定哪里出错了,如果您能提供帮助,我将非常高兴。

0dxa2lsx

0dxa2lsx1#

如果idNumber类型(我认为它是),那么id.hostnameid.password就是undefined,所以基本上

{
  hostname: id.hostname,
  password: id.password,
  command: 'stop'
}

以及

{
  command: 'stop'
}

对于Javascript来说是一样的,你实际上是在发送相同的负载。我认为解决这个问题的最好方法是通过改变请求中的属性来改变后端处理传入负载的方式。如果你没有改变后端的权限,你就必须获取或读取当前存储的值,并在负载中使用它。类似于

user = axios.get('http://localhost:3002/users/'+id).then(r => r.data)
axios.put('http://localhost:3002/users/'+id,{
            hostname: user.hostname,
            password: user.password,
            command: 'stop'
         })

另外,PUT是用来替换一个记录的,PATCH是用来更新现有的记录的,这听起来更像是你想做的,也许只是尝试axios.patch,它可能会工作。

hyrbngr7

hyrbngr72#

我做的和@rodrigo-naranjo完全一样,只是我把put调用嵌入到get调用的响应中:👇

axios.get("http://localhost:3002/users/" + id).then((r) => {
    let user = r.data;
    axios.put("http://localhost:3002/users/" + id, {
      hostname: user.hostname,
      password: user.password,
      command: "stop",
    });
  });
  • id是来自应用上下文的输入值。*

相关问题