Axios使用正文和标题删除请求?

Asf*_*red 42 javascript http http-delete reactjs axios

我在ReactJS中编程时正在使用Axios,我假装向我的服务器发送DELETE请求.

为此,我需要标题:

headers: {
  'Authorization': ...
}
Run Code Online (Sandbox Code Playgroud)

而身体是由

var payload = {
    "username": ..
}
Run Code Online (Sandbox Code Playgroud)

我一直在网络中搜索,只发现DELETE方法需要一个"param"并且不接受"数据".

我一直试图像这样发送它:

axios.delete(URL, payload, header);
Run Code Online (Sandbox Code Playgroud)

甚至

axios.delete(URL, {params: payload}, header);
Run Code Online (Sandbox Code Playgroud)

但似乎没有任何作用......

有人可以告诉我它是否可能(我认为是)发送带有标题和正文的DELETE请求以及如何执行此操作?

先感谢您!

tar*_*ugh 54

axiox.delete确实支持请求正文.它接受两个参数:url和optional config.您可以使用config.data设置响应正文,如下所示:

axios.delete(url, { data: { foo: "bar" }, headers: { "Authorization": "***" } });
Run Code Online (Sandbox Code Playgroud)

请参阅此处 - https://github.com/axios/axios/issues/897


Van*_*tin 32

以下是使用axios发送各种http动词所需格式的简短摘要:

以上两个是等价的.params在第二种方法中观察关键字

  • POSTPATCH

axios.post('any-url', payload).then(
  // payload is the body of the request
  // Do something
)

axios.patch('any-url', payload).then(
  // payload is the body of the request
  // Do something
)
Run Code Online (Sandbox Code Playgroud)

  • DELETE

axios.delete('url', { data: payload }).then(
  // Observe the data keyword this time. Very important
  // payload is the request body
  // Do something
)
Run Code Online (Sandbox Code Playgroud)

关键带走

  • get请求可选地需要一个params键来正确设置查询参数
  • delete具有正文的请求需要在data密钥下设置

  • 您的回答让我希望堆栈溢出有+2 upvote功能。 (4认同)

小智 27

因此,经过多次尝试,我发现它可以正常工作。

请遵循订单顺序,这非常重要,否则将无法正常工作

axios.delete(
        URL,
        {headers: {
          Authorization: authorizationToken
        },
        data:{
          source:source
        }}
      );
Run Code Online (Sandbox Code Playgroud)

  • 您好,您能解释一下为什么您的答案有效吗? (4认同)
  • 可能是因为“DELETE”不应该有请求主体。也许那里有什么东西可以阻止这种情况(因为它应该) (3认同)

Hem*_*wad 8

对于删除,您需要按照以下操作

axios.delete("/<your endpoint>", { data:<"payload object">})
Run Code Online (Sandbox Code Playgroud)

它对我有用。


ron*_*ara 7

我遇到了同样的问题,我是这样解决的:

axios.delete(url, {data:{username:"user", password:"pass"}, headers:{Authorization: "token"}})
Run Code Online (Sandbox Code Playgroud)


Thu*_*ird 7

实际上,axios.delete支持请求正文。
它接受两个参数: aURL和一个 optional config。那是...

axios.delete(url: string, config?: AxiosRequestConfig | undefined)
Run Code Online (Sandbox Code Playgroud)

您可以执行以下操作来设置删除请求的响应正文:

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)
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助别人!


Olu*_*ule 6

轴距。删除就是传递一个URL和一个可选配置

axios.delete(url [,config])

可用于配置的字段可以包括标题

这样就可以将API调用编写为:

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

axios.delete('https://foo.svc/resource', {headers, data})
Run Code Online (Sandbox Code Playgroud)


x4w*_*wiz 5

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

"axios": "^0.21.1" (not 0.20.0)
Run Code Online (Sandbox Code Playgroud)

然后,上述解决方案有效

axios.delete("URL", {
      headers: {
        Authorization: `Bearer ${token}`,
      },
      data: {
        var1: "var1",
        var2: "var2"
      },
    })
Run Code Online (Sandbox Code Playgroud)

您可以访问有效负载

req.body.var1, req.body.var2
Run Code Online (Sandbox Code Playgroud)

这是问题:

https://github.com/axios/axios/issues/3335


小智 5

如果我们有:

myData = { field1: val1, field2: val2 }
Run Code Online (Sandbox Code Playgroud)

我们可以将数据(JSON)转换为字符串,然后将其作为参数发送到后端:

axios.delete("http://localhost:[YOUR PORT]/api/delete/" + JSON.stringify(myData), 
     { headers: { 'authorization': localStorage.getItem('token') } }
 )
Run Code Online (Sandbox Code Playgroud)

在服务器端,我们取回对象:

app.delete("/api/delete/:dataFromFrontEnd", requireAuth, (req, res) => {
    // we could get our object back:
    const myData = JSON.parse(req.params.dataFromFrontEnd)
 })
Run Code Online (Sandbox Code Playgroud)

注:2月14日15:49 “ x4wiz ”的答案比我的更准确!我的解决方案是没有“身体”(在某些情况下可能会有所帮助......)

更新:当对象的重量为 540 字节 (15*UUIDv4) 及更多时,我的解决方案不起作用(请检查文档以获取确切的值)。“ x4wiz ”(以及上面的许多其他解决方案)的解决方案要好得多。那么,为什么不删除我的答案呢?因为它确实有效,但最重要的是,它为我带来了 Stackoverflow 的大部分声誉;-)


Jer*_*ong 5

Axios DELETE 请求确实支持与 POST 请求类似的功能,但格式不同

DELETE 请求负载示例代码:

axios.delete(url, { data: { hello: "world" }, headers: { "Authorization": "Bearer_token_here" } });
Run Code Online (Sandbox Code Playgroud)

POST 请求负载示例代码:

axios.post(url, { hello: "world" }, { headers: { "Authorization": "Bearer_token_here" } });
Run Code Online (Sandbox Code Playgroud)

注意到{ hello: "world" }以不同的方式配置,但两者执行相同的功能。