<p>axios.delete: ¿debe especificar el objeto 'datos'?</p>

Creado en 3 mar. 2017  ·  22Comentarios  ·  Fuente: axios/axios

Cuando se usa el alias axios.delete , la carga útil no se envía con la llamada a la API si no especifica data .

Tu tienes que hacer:

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

en lugar de

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

De acuerdo con esto , no debería tener que definir data . Pude usar otros métodos con carga útil sin especificar data .

Comentario más útil

No, esto no funcionará.

Lo que tiene que pasar a Axios es un objeto Request Config y en este objeto puede encontrar las propiedades data y params . Los utilizará para enviar datos al servidor.

De esta manera: axios.delete(URL, {params: {foo: 'bar'}})


En un delete request , debe usar params en lugar de data , consulte los documentos:

// "data" is the data to be sent as the request body
// Only applicable for request methods 'PUT', 'POST', and 'PATCH'
// When no solicitud de transformación 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 comentarios

No, esto no funcionará.

Lo que tiene que pasar a Axios es un objeto Request Config y en este objeto puede encontrar las propiedades data y params . Los utilizará para enviar datos al servidor.

De esta manera: axios.delete(URL, {params: {foo: 'bar'}})


En un delete request , debe usar params en lugar de data , consulte los documentos:

// "data" is the data to be sent as the request body
// Only applicable for request methods 'PUT', 'POST', and 'PATCH'
// When no solicitud de transformación 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 Estoy confundido. params es enviar parámetros de cadena de consulta, eso no es lo que estoy haciendo.
En cuanto a lo que citó anteriormente, no dice nada sobre delete .

params es enviar parámetros de cadena de consulta, eso no es lo que estoy haciendo.

Si quieres hacer axios.delete , eso es exactamente lo que tienes que hacer.

No usas axios.delete(URL, {
data: { foo: 'bar' } //Solo aplicable para los métodos de solicitud 'PUT', 'POST' y 'PATCH'
})
para una solicitud de eliminación, utilizará axios.delete(URL, {
params: { foo: 'bar' }
})

Enviará datos como el cuerpo de la solicitud SOLO CUANDO esté utilizando 'PUT', 'POST' y 'PATCH'.

Me temo que está usando axios.delete como axios.post o ( axios.put o axios.patch ). Cuando use axios.delete , enviará un id a un servidor, y el servidor mismo encontrará un resource que coincida con el id dado, solo entonces se eliminará (o activará alguna acción, pero la solicitud se asigna como http delete ).

Usando axios.delete(URL, {
data: { foo: 'bar' }
}) estás enviando resource , lo cual no tiene ningún sentido.

Eche un vistazo a los enlaces a continuación, tendrá una mejor comprensión:

http://stackoverflow.com/questions/12142652/cuál-es-la-utilidad-de-poner-y-eliminar-http-request-methods

https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html [Sección 9.7]

El método HTTP DELETE no debe tener un cuerpo de solicitud. DELETE le dice al servidor de origen que elimine el recurso identificado por el URI.

En mi caso, también doy una carga útil. Pero de cualquier manera, si funciona usando data , debería funcionar usando la abreviatura.

EDITAR: La especificación no impide/prohíbe pasar una carga útil.

No hay una abreviatura para axios.delete:

axios.request(config)

axios.get(url[, configuración])

axios.delete(url[, config])

axios.head(url[, config])

axios.post(url[, datos[, configuración]])

axios.put(url[, datos[, configuración]])

axios.patch(url[, datos[, configuración]])

@AkiraLaine, la especificación tampoco prohíbe enviar cuerpos de solicitud para GET. ¿Axios también debería permitirle usar la notación abreviada para enviar cuerpos de solicitud en solicitudes GET también?

Estoy cerrando el problema ya que es el comportamiento esperado.

@rubennorte Creo que deberíamos apoyar body en DEL
HTTP 1.1
Y por ejemplo, Elástico

@cggaurav es compatible.

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

En una nota al margen, en el servidor, la identificación se muestra en req.query en lugar de req.params cuando se usa axios.delete('/some/uri', {params: {id: 1 } }) así. Sólo quería tirar eso por ahí.

@aricsangchat eso es probable porque está usando express, que no está afiliado a axios en absoluto. Cuando express se refiere a params , se refiere a valores dinámicos que coinciden en la ruta de la solicitud. Cuando axios se refiere a params se refiere a parámetros de cadena 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))

El resultado que obtendría al ejecutarlo sería:

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

@jready Sí, esa es nuestra configuración.

¿Dónde está escrito que eliminar no puede tener un cuerpo (como publicación)? Sería bueno si axios admite esto https://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-19#page -23

Gracias

para tu información Justo los puntos que DELETE no deberían tener cuerpo. Sin embargo, a veces te ves obligado a enviar un cuerpo cuando la API está fuera de tu control. p.ej
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
  ])
})

@jready : seguro y gracias por el ejemplo. Solo quería agregar un razonamiento de por qué es posible que se deba pasar un cuerpo en DELETE cuando se usa axios.

@duhseekoh Tal vez esto ayude: https://github.com/axios/axios/issues/897#issuecomment -343715381

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

Lo tengo funcionando con data pero no funciona con params con la versión "axios": "^0.17.1"

@quinnliu Creo que elegir usar data o params depende de cómo su backend maneje la solicitud.

  • Usar data es poner la carga útil dentro del cuerpo de la solicitud, tal como lo hace con post .
  • Usar params es tratar las cargas útiles como parámetros de URL. Like si envías
axios.delete(URL, {
 params: { foo: 'bar' }
})

es lo mismo que enviar una solicitud a URL?foo=bar.

Abstracción de axios en api. Parámetros en datos: solo nombre
`` api.delete( /proyectos/${idProjectTech}/techs`, {datos: { nombre: datos.nombre }})

¿Fue útil esta página
0 / 5 - 0 calificaciones