对于Axios DELETE Request,您需要在一个JSON对象下包含请求有效负载和头部:
axios.delete(URL, {
headers: {
'Authorization': ...
},
data: {
"username": ...
}
})
为什么我不能这样做,因为我做类似的POST请求?
查看Axios文档,我们看到.get、.post…有不同的签名:
axios.get(url[, config])
axios.delete(url[, config])
axios.head(url[, config])
axios.options(url[, config])
axios.post(url[, data[, config]])
axios.put(url[, data[, config]])
axios.patch(url[, data[, config]])
注意只有post, patch和put有data参数。这是因为这些方法通常包含一个主体。
查看RFC7231,我们看到DELETE请求不需要有body;如果您包含一个主体,那么它的含义在规范中没有定义,服务器也不需要理解它。
DELETE请求消息中的有效负载没有定义的语义;在DELETE请求上发送有效负载主体可能会导致某些现有实现拒绝该请求。
(此处第5段)。
在这种情况下,如果您还控制着服务器,那么您可以决定在请求中接受这个主体,并给它任何您想要的语义。也许你正在与别人的服务器合作,他们期望这个身体。
因为规范中没有定义带主体的DELETE请求,而且它们并不常见,所以Axios没有将它们包含在这些方法别名中。但是,因为它们是可能的,你可以做到,只是需要多一点努力。
我认为这将是更传统的包括url上的信息,所以你会这样做:
axios.delete(
`https://example.com/user/${encodeURIComponent(username}`,
{ headers: ... }
)
或者,如果您希望能够使用不同的标准删除用户(有时通过用户名,或通过电子邮件,或通过id…)
axios.delete(
`https://example.com/user?username=${encodeURIComponent(username)}`,
{ headers: ... }
)