<p>axios.delete - deve especificar o objeto 'data'?</p>

Criado em 3 mar. 2017  ·  22Comentários  ·  Fonte: axios/axios

Ao usar o alias axios.delete , a carga útil não será enviada com a chamada da API se você não especificar data .

Você tem que fazer:

axios.delete(URL, {
 data: { foo: 'bar' }
})

ao invés de

axios.delete(URL, { foo: 'bar' })

De acordo com isso , você não deveria ter que definir data . Consegui usar outros métodos com carga útil sem especificar data .

Comentários muito úteis

Não, isso não vai funcionar.

O que você tem que passar para o Axios é um Request Config Object e neste objeto você pode encontrar as propriedades data e params . Você os usará para enviar dados para o servidor.

Desta forma: axios.delete(URL, {params: {foo: 'bar'}})


Em um delete request você deve usar params ao invés de data , veja os documentos:

// "data" is the data to be sent as the request body
// Only applicable for request methods 'PUT', 'POST', and 'PATCH'
// When no transformRequest is set, must be of one of the following types:
// - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
// - Browser only: FormData, File, Blob
// - Node only: Stream

data: { firstName: 'Fred' },

Todos 22 comentários

Não, isso não vai funcionar.

O que você tem que passar para o Axios é um Request Config Object e neste objeto você pode encontrar as propriedades data e params . Você os usará para enviar dados para o servidor.

Desta forma: axios.delete(URL, {params: {foo: 'bar'}})


Em um delete request você deve usar params ao invés de data , veja os documentos:

// "data" is the data to be sent as the request body
// Only applicable for request methods 'PUT', 'POST', and 'PATCH'
// When no transformRequest is set, must be of one of the following types:
// - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
// - Browser only: FormData, File, Blob
// - Node only: Stream

data: { firstName: 'Fred' },

@charlesrochati Estou confuso. params é enviar parâmetros de query string, não é isso que estou fazendo.
Quanto ao que você citou acima, não diz nada sobre delete .

params é enviar parâmetros de string de consulta, não é isso que estou fazendo.

Se você quer fazer um axios.delete , é exatamente isso que você tem que fazer.

Você não usa axios.delete(URL, {
data: { foo: 'bar' } //Aplicável apenas para métodos de solicitação 'PUT', 'POST' e 'PATCH'
})
para uma solicitação de exclusão, você usará axios.delete(URL, {
params: { foo: 'bar' }
})

Você enviará dados como o corpo da solicitação SOMENTE QUANDO estiver usando 'PUT', 'POST' e 'PATCH'.

Receio que você esteja usando axios.delete como axios.post ou ( axios.put ou axios.patch ). Ao usar axios.delete , você enviará um id para um servidor, e o próprio servidor encontrará um resource que corresponde ao id , só então ele será removido (ou acionará alguma ação, mas a solicitação será mapeada como http delete ).

Usando axios.delete(URL, {
data: { foo: 'bar' }
}) você está enviando um resource , o que não faz o menor sentido.

Dê uma olhada nos links abaixo, você entenderá melhor:

http://stackoverflow.com/questions/12142652/what-is-the-usefulness-of-put-and-delete-http-request-methods

https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html [Seção 9.7]

O método HTTP DELETE não deve ter um corpo de solicitação. DELETE está dizendo ao servidor de origem para remover o recurso identificado pelo URI.

No meu caso, eu dou uma carga útil também. Mas de qualquer forma, se funciona usando data , deve funcionar usando a abreviação.

EDIT: A especificação não proíbe/proíbe passar uma carga útil.

Não há abreviação para axios.delete:

axios.request(config)

axios.get(url[, config])

axios.delete(url[, config])

axios.head(url[, config])

axios.post(url[, data[, config]])

axios.put(url[, data[, config]])

axios.patch(url[, data[, config]])

@AkiraLaine a especificação também não proíbe o envio de corpos de solicitação para GET. O axios também deve permitir que você use a notação abreviada para enviar corpos de solicitação em solicitações GET também?

Estou encerrando a questão, pois é o comportamento esperado.

@rubennorte Acho que devemos apoiar body em DEL
HTTP 1.1
E por exemplo, Elastic

@cggaurav é suportado.

axios.delete('/some/uri', { body: 'my delete body' })

Em uma nota lateral, no servidor, o id está aparecendo em req.query em vez de req.params ao usar axios.delete('/some/uri', {params: { id: 1 } }) assim. Só queria jogar isso lá fora.

@aricsangchat provavelmente porque você está usando o express que não é afiliado ao axios. Quando express se refere a params , está falando sobre valores dinâmicos correspondentes no caminho da solicitação. Quando axios se refere a params está se referindo a parâmetros de string de consulta.

// Express
router.get('/:foo/:bar', (req, res) => {
  res.json({
    query: req.query,
    params: req.params
  })
})
// Axios
axios.get('/some/uri', { params: { id: 1 } })
.then((response) => console.log(response.data))

A saída que você obteria da execução seria:

{
  "query": { "id": 1 },
  "params": {
    "foo": "some",
    "bar": "uri"
  }
}

@jcreaty Sim, essa é a nossa configuração.

Onde está escrito que delete não pode ter corpo (como post)? Seria bom se o axios suportasse isso https://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-19#page -23

Obrigado

PARA SUA INFORMAÇÃO. Pontos justos que DELETE não deve ter um corpo. No entanto, às vezes você fica preso tendo que enviar um corpo quando a API está fora de seu controle. por exemplo
https://auth0.com/docs/api/authorization-extension#remove -user-from-roles 👎

@duhseekoh

const extension_url = 'mycompany.auth0.com'
const access_token = 'abc123'
const user_id = 12345
const role_id = 67890

axios.delete(`https://${extension_url}/users/${role_id}/roles`, {
  headers: {
    'Authorization': `Bearer ${access_token}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify([
    user_id
  ])
})

@jcready - Com certeza e obrigado pelo exemplo. Só queria adicionar algum raciocínio sobre por que um corpo pode precisar ser passado em DELETE ao usar axios.

@duhseekoh Talvez isso ajude: https://github.com/axios/axios/issues/897#issuecomment -343715381

const response = await axios.delete('/api/matches/delete_match', {
        data: { matchInfo }
    });

Eu tenho que trabalhar com data mas não funciona com params com a versão "axios": "^0.17.1"

@quinnliu Acho que escolher usar data ou params depende de como seu back-end lida com a solicitação.

  • Usar data é colocar a carga útil dentro do corpo da solicitação, assim como você faz com post .
  • Usar params é tratar os payloads como parâmetros de url. Curte se enviar
axios.delete(URL, {
 params: { foo: 'bar' }
})

é o mesmo que enviar solicitação para URL?foo=bar.

Abstração de axios em api. Parâmetros nos dados: apenas nome
`` api.delete( /projects/${idProjectTech}/techs`, {data: { name: data.name }})

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

c0debreaker picture c0debreaker  ·  3Comentários

reggi picture reggi  ·  3Comentários

9tor picture 9tor  ·  3Comentários

ghost picture ghost  ·  3Comentários

helmus picture helmus  ·  3Comentários