Javascript Axios删除带有正文和标题的请求?

Javascript Axios删除带有正文和标题的请求?,javascript,reactjs,http,axios,http-delete,Javascript,Reactjs,Http,Axios,Http Delete,我在用ReactJS编程时使用Axios,我假装向我的服务器发送删除请求 为此,我需要标题: headers: { 'Authorization': ... } 而身体是由 var payload = { "username": .. } 我一直在inter-webs中搜索,只发现DELETE方法需要一个“param”,不接受任何“data” 我一直在尝试这样发送: axios.delete(URL, payload, header); 甚至 axios.delete(URL,

我在用ReactJS编程时使用Axios,我假装向我的服务器发送删除请求

为此,我需要标题:

headers: {
  'Authorization': ...
}
而身体是由

var payload = {
    "username": ..
}
我一直在inter-webs中搜索,只发现DELETE方法需要一个“param”,不接受任何“data”

我一直在尝试这样发送:

axios.delete(URL, payload, header);
甚至

axios.delete(URL, {params: payload}, header);
但似乎什么都不管用

有人能告诉我是否有可能(我想是这样)发送一个包含标题和正文的删除请求,以及如何做到这一点吗


提前谢谢你

axios.delete
不支持请求主体。它接受两个参数:
url
和可选配置。您可以使用
config.data
设置请求正文和标题,如下所示:

axios.delete(url, { data: { foo: "bar" }, headers: { "Authorization": "***" } });
请参见此处-

axios。删除是必要的

delete(url[,config])

田野

这使得API调用可以编写为:

const headers = {
  'Authorization': 'Bearer paperboy'
}
const data = {
  foo: 'bar'
}

axios.delete('https://foo.svc/resource', {headers, data})

要通过
axios
发送带有某些标题的HTTP DELETE,我已经完成了以下操作:

  const deleteUrl = "http//foo.bar.baz";
  const httpReqHeaders = {
    'Authorization': token,
    'Content-Type': 'application/json'
  };
  // check the structure here: https://github.com/axios/axios#request-config
  const axiosConfigObject = {headers: httpReqHeaders}; 

  axios.delete(deleteUrl, axiosConfigObject);
不同HTTP谓词(GET、POST、PUT、DELETE)的
axios
语法很复杂,因为有时第二个参数应该是HTTP正文,有时(可能不需要时)您只需将头作为第二个参数传递

但是,假设您需要发送一个没有HTTP正文的HTTP POST请求,然后需要将
undefined
作为第二个参数传递

请记住,根据配置对象()的定义,在调用
axios.delete
时,您仍然可以通过
data
字段在HTTP调用中传递HTTP正文,但是对于HTTP删除谓词,它将被忽略


第二个参数有时是HTTP主体,而另一些时候整个
config
对象是
axios
的,这两者之间的混淆是由于HTTP规则是如何实现的。有时HTTP调用不需要HTTP正文就可以被认为是有效的。

以下是使用axios发送各种HTTP谓词所需格式的简要总结:

  • 获取
    :两种方式

    • 第一种方法

      axios.get('/user?ID=12345')
      .然后(功能(响应){
      //做点什么
      })
      
    • 第二种方法

      axios.get(“/user”{
      参数:{
      身份证号码:12345
      }
      })
      .然后(功能(响应){
      //做点什么
      })
      
    上述两项是等价的。观察第二种方法中的
    params
    关键字

  • POST
    PATCH

    axios.post('any-url',有效负载)。然后(
    //有效负载是请求的主体
    //做点什么
    )
    patch('any-url',payload)。然后(
    //有效负载是请求的主体
    //做点什么
    )
    
  • 删除

    axios.delete('url',{data:payload})。然后(
    //这次注意数据关键字。非常重要
    //有效负载是请求主体
    //做点什么
    )
    
外卖钥匙
  • get
    请求需要一个
    params
    键来正确设置查询参数
  • delete
    带有主体的请求需要在
    数据
    键下进行设置

    • 我遇到了同样的问题。。。 我通过创建一个自定义axios实例解决了这个问题。然后用它发出一个经过身份验证的删除请求

      const token = localStorage.getItem('token');
      const request = axios.create({
              headers: {
                  Authorization: token
              }
          });
      
      await request.delete('<your route>, { data: { <your data> }});
      
      const-token=localStorage.getItem('token');
      const request=axios.create({
      标题:{
      授权:令牌
      }
      });
      等待请求。删除(',{data:{}});
      
      我遇到了同样的问题,我是这样解决的:

      axios.delete(url, {data:{username:"user", password:"pass"}, headers:{Authorization: "token"}})
      

      对于删除,您需要按照以下步骤执行

      axios.delete("/<your endpoint>", { data:<"payload object">})
      
      axios.delete(“/”,{data:})
      

      它对我有效。

      因此,经过多次尝试,我发现它有效

      请按照订单顺序操作这非常重要,否则将无法正常工作

      axios.delete(URL, {
        headers: {
          Authorization: authorizationToken
        },
        data: {
          source: source
        }
      });
      

      实际上,
      axios.delete
      支持请求主体
      它接受两个参数:一个
      URL
      和一个可选的
      config
      。那就是

      axios.delete(url: string, config?: AxiosRequestConfig | undefined)
      
      您可以执行以下操作来设置删除请求的响应正文:

      let config = { 
          headers: {
              Authorization: authToken
          },
          data: { //! Take note of the `data` keyword. This is the request body.
              key: value,
              ... //! more `key: value` pairs as desired.
          } 
      }
      
      axios.delete(url, config)
      

      我希望这对别人有帮助

      我找到了一种有效的方法:

      axios
            .delete(URL, {
              params: { id: 'IDDataBase'},
              headers: {
                token: 'TOKEN',
              },
            }) 
            .then(function (response) {
              
            })
            .catch(function (error) {
              console.log(error);
            });
      

      我希望这对你也有用。

      我尝试了上述所有方法,但都不适用于我。我最终只是使用PUT(inspiration found),只是更改了服务器端逻辑,对这个url调用执行了删除。(django rest框架函数重写)

      e、 g


      对于那些尝试了上述所有方法但仍然没有看到请求有效负载的用户,请确保:

      "axios": "^0.21.1" (not 0.20.0)
      
      然后,上述解决方案起作用

      axios.delete("URL", {
            headers: {
              Authorization: `Bearer ${token}`,
            },
            data: {
              var1: "var1",
              var2: "var2"
            },
          })
      
      您可以使用

      req.body.var1, req.body.var2
      
      问题是:

      如果我们有:

      `myData = { field1: val1, field2: val2 }`
      
      我们可以将数据(JSON)转换为字符串,然后将其作为参数发送:

      `axios.delete(url + **JSON.stringify(myData)**, 
           { headers: { 'authorization': localStorage.getItem('token') } }
       )`
      
      在服务器端,我们可以取回我们的对象:

      `app.delete("/api/delete/:myData", requireAuth, (req, res) => {
          const myData = **JSON.parse(req.params.myData)**
       })`
      

      这对我不起作用。。。我有
      const headers={'Authorization':…}
      data={'username':…}
      axios.delete('http://...“,{headers,data})
      但服务器无法访问这些头…从浏览器发出的请求表示不同。请参阅此Stackblitz()以及浏览器网络选项卡()中的请求。在这里,您需要确保您以正确的方式读取服务器端的标题,或者请求没有被拦截和篡改,我正在使用React和Django,问题是我想在相同的删除请求中发送一个正文和标题。您的回答让我希望在堆栈溢出上有一个+2向上投票功能。这是唯一一个详细解释它的答案。谢谢,这真的有助于理解其他人。如何使用params而不是body发送删除请求?这个问题的最佳答案。谢谢。@MaFiA,如果您想发送带参数的删除请求。您只需使用query stringsThanks将其放入url,我在我的nestJs HttpService delete方法中使用了它
      `app.delete("/api/delete/:myData", requireAuth, (req, res) => {
          const myData = **JSON.parse(req.params.myData)**
       })`