Axios PUT 请求-React

Axios PUT request -React

我想发送一个 put 请求来修改我的 JSON 文件的命令部分。这是我的 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
    }
  ]
}

我只想更改命令信息,同时保持主机名和密码信息不变。 我不确定我哪里做错了,如果你能帮忙我会很高兴。

如果 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,它可能会起作用。