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
.
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:
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.
@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.
data
consiste à placer la charge utile dans le corps de la requête, comme vous le faites avec post
.params
consiste à traiter les charges utiles comme des paramètres d'URL. Aime si tu envoiesaxios.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 }})
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
etparams
. Vous les utiliserez pour envoyer des données au serveur.Par ici :
axios.delete(URL, {params: {foo: 'bar'}})
Dans un
delete request
vous devez utiliserparams
au lieu dedata
, 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 transformationis 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' },