<p>axios.delete - doit spécifier l'objet 'data' ?</p>

Créé le 3 mars 2017  ·  22Commentaires  ·  Source: axios/axios

Lorsque vous utilisez l'alias axios.delete , la charge utile n'est pas envoyée avec l'appel d'API si vous ne spécifiez pas data .

Tu dois faire:

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

au lieu de

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

Selon ceci , vous ne devriez pas avoir à définir data . J'ai pu utiliser d'autres méthodes avec la charge utile sans spécifier data .

Commentaire le plus utile

Non, cela ne fonctionnera pas.

Ce que vous devez transmettre à Axios est un objet de configuration de demande et dans cet objet, vous pouvez trouver les propriétés data et params . Vous les utiliserez pour envoyer des données au serveur.

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


Dans un delete request vous devez utiliser params au lieu de data , voir les docs :

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

Tous les 22 commentaires

Non, cela ne fonctionnera pas.

Ce que vous devez transmettre à Axios est un objet de configuration de demande et dans cet objet, vous pouvez trouver les propriétés data et params . Vous les utiliserez pour envoyer des données au serveur.

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


Dans un delete request vous devez utiliser params au lieu de data , voir les docs :

// "data" is the data to be sent as the request body
// Only applicable for request methods 'PUT', 'POST', and 'PATCH'
// When no demande de transformation 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 je suis confus. params est d'envoyer des paramètres de chaîne de requête, ce n'est pas ce que je fais.
Quant à ce que vous avez cité ci-dessus, il ne dit rien sur delete .

params est d'envoyer des paramètres de chaîne de requête, ce n'est pas ce que je fais.

Si vous voulez faire un axios.delete , c'est exactement ce que vous devez faire.

Vous n'utilisez pas axios.delete(URL, {
data: { foo: 'bar' } //Applicable uniquement pour les méthodes de requête 'PUT', 'POST' et 'PATCH'
})
pour une demande de suppression, vous utiliserez axios.delete(URL, {
params: { foo: 'bar' }
})

Vous enverrez des données en tant que corps de requête UNIQUEMENT LORSQUE vous utilisez 'PUT', 'POST' et 'PATCH'.

J'ai bien peur que vous utilisiez axios.delete comme un axios.post ou ( axios.put ou axios.patch ). Lorsque vous utilisez axios.delete , vous enverrez un id à un serveur, et le serveur lui-même trouvera un resource qui correspond à celui donné id , alors seulement il sera supprimé (ou déclenchera une action, mais la demande est mappée en tant que http delete ).

En utilisant axios.delete(URL, {
data: { foo: 'bar' }
}) vous envoyez un resource , ce qui n'a aucun sens.

Jetez un oeil aux liens ci-dessous, vous aurez une meilleure compréhension:

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 [Section 9.7]

La méthode HTTP DELETE ne doit pas avoir de corps de requête. DELETE indique au serveur d'origine de supprimer la ressource identifiée par l'URI.

Dans mon cas, je donne également une charge utile. Mais dans tous les cas, si cela fonctionne avec data , cela devrait fonctionner avec le raccourci.

EDIT : La spécification n'interdit pas/n'interdit pas de transmettre une charge utile.

Il n'y a pas de raccourci pour axios.delete :

axios.request(config)

axios.get(url[, config])

axios.delete(url[, config])

axios.head(url[, config])

axios.post(url[, données[, config]])

axios.put(url[, données[, config]])

axios.patch(url[, données[, config]])

@AkiraLaine, la spécification n'interdit pas non plus l'envoi de corps de requête pour GET. Est-ce qu'axios devrait également vous permettre d'utiliser la notation abrégée pour envoyer des corps de requête dans les requêtes GET également ?

Je ferme le sujet car c'est le comportement attendu.

@rubennorte Je pense que nous devrions soutenir body en DEL
HTTP 1.1
Et pour un exemple, Elastic

@cggaurav c'est pris en charge.

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

En passant, sur le serveur, l'identifiant apparaît dans req.query au lieu de req.params lors de l'utilisation d'axios.delete('/some/uri', {params : { id : 1 } }) comme ceci. Je voulais juste jeter ça là-bas.

@aricsangchat c'est probablement parce que vous utilisez express qui n'est pas du tout affilié à axios. Lorsque express fait référence à params , il s'agit de valeurs dynamiques correspondant au chemin de la requête. Lorsque axios fait référence à params , il fait référence aux paramètres de la chaîne de requête.

// 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))

La sortie que vous obtiendriez en exécutant ce serait:

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

@jcready Oui, c'est notre configuration.

Où est écrit que delete ne peut pas avoir de corps (comme post) ? Ce serait bien si axios prend en charge ceci https://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-19#page -23

Merci

POUR VOTRE INFORMATION. Points justes que DELETE ne doit pas avoir de corps. Cependant, vous êtes parfois obligé d' envoyer un corps lorsque l'API est hors de votre contrôle. par exemple
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 - Bien sûr et merci pour l'exemple. Je voulais juste ajouter un raisonnement expliquant pourquoi un corps peut devoir être transmis DELETE lors de l'utilisation d'axios.

@duhseekoh Peut-être que cela aidera : https://github.com/axios/axios/issues/897#issuecomment -343715381

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

Je l'ai fait fonctionner avec data mais ne fonctionne pas avec params avec la version "axios": "^0.17.1"

@quinnliu Je pense que le choix d'utiliser data ou params dépend de la façon dont votre backend gère la demande.

  • L'utilisation data consiste à placer la charge utile dans le corps de la requête, comme vous le faites avec post .
  • L'utilisation params consiste à traiter les charges utiles comme des paramètres d'URL. Aime si tu envoies
axios.delete(URL, {
 params: { foo: 'bar' }
})

c'est la même chose que d'envoyer une requête à URL?foo=bar.

Abstraction d'axios dans api. Paramètres dans les données : nom uniquement
`` api.delete( /projects/${idProjectTech}/techs`, {données : { nom : données.nom }})

Cette page vous a été utile?
0 / 5 - 0 notes