J'utilise Axios lors de la programmation dans ReactJS et je fais semblant d'envoyer une demande DELETE à mon serveur.
Pour ce faire, j'ai besoin des en-têtes:
headers: {
'Authorization': ...
}
et le corps est composé de
var payload = {
"username": ..
}
J'ai cherché dans les sites Web et seulement constaté que la méthode DELETE nécessite un "param" et n'accepte pas de "données".
J'ai essayé de l'envoyer comme ça:
axios.delete(URL, payload, header);
ou même
axios.delete(URL, {params: payload}, header);
Mais rien ne semble fonctionner ...
Quelqu'un peut-il me dire s'il est possible (je suppose que c'est le cas) d'envoyer une demande DELETE avec les en-têtes et le corps et comment le faire?
Merci d'avance!
Donc, après plusieurs essais, j'ai trouvé que ça fonctionnait.
S'il vous plaît suivez l'ordre dans l'ordre c'est très important sinon cela ne fonctionnera pas
axios.delete(
URL,
{headers: {
Authorization: authorizationToken
},
data:{
source:source
}}
);
axiox.delete prend en charge un corps de requête. Il accepte deux paramètres: url et optionnel config. Vous pouvez utiliser config.data pour définir le corps de la réponse comme suit:
axios.delete(url, { data: { foo: "bar" } });
Voir ici - https://github.com/axios/axios/issues/897
Voici un bref résumé des formats requis pour envoyer divers verbes http avec axios:
GET
: Deux façons
axios.get('/user?ID=12345')
.then(function (response) {
// Do something
})
axios.get('/user', {
params: {
ID: 12345
}
})
.then(function (response) {
// Do something
})
Les deux ci-dessus sont équivalents. Observez le mot clé params
dans la deuxième méthode.
POST
et PATCH
axios.post('any-url', payload).then(
// payload is the body of the request
// Do something
)
axios.patch('any-url', payload).then(
// payload is the body of the request
// Do something
)
DELETE
axios.delete('url', { data: payload }).then(
// Observe the data keyword this time. Very important
// payload is the request body
// Do something
)
Points clés à retenir
get
nécessitent éventuellement une touche params
pour définir correctement les paramètres de requêtedelete
avec un corps doivent être définies sous la touche data
axios. delete est passé une url et une configuration facultative .
axios.delete (url [ config])
Les champs disponibles pour la configuration peuvent inclure les en-têtes .
Cela fait que l'appel API peut être écrit comme suit:
const headers = {
'Authorization': 'Bearer paperboy'
}
const data = {
foo: 'bar'
}
axios.delete('https://foo.svc/resource', {headers, data})
J'ai eu le même problème, je l'ai résolu comme ça:
axios.delete(url, {data:{username:"user", password:"pass"}, headers:{Authorization: "token"}})
Pour envoyer un HTTP DELETE avec certains en-têtes via axios
j'ai fait ceci:
const deleteUrl = "http//foo.bar.baz";
const httpReqHeaders = {
'Authorization': token,
'Content-Type': 'application/json'
};
// check the structure here: https://github.com/axios/axios#request-config
const axiosConfigObject = {headers: httpReqHeaders};
axios.delete(deleteUrl, axiosConfigObject);
La syntaxe axios
de différents verbes HTTP (GET, POST, PUT, DELETE) est délicate car parfois le second paramètre est supposé être le corps HTTP, d'autres fois (quand cela n'est peut-être pas nécessaire) en-têtes en tant que 2ème paramètre.
Cependant, supposons que vous deviez envoyer une requête HTTP POST sans corps HTTP, vous devez ensuite passer undefined
en tant que deuxième paramètre.
Gardez à l'esprit que selon la définition de l'objet de configuration ( https://github.com/axios/axios#request-config ), vous pouvez toujours transmettre un corps HTTP à l'appel HTTP via la data
lorsque vous appelez axios.delete
, cependant, pour le verbe HTTP DELETE, il sera ignoré.
Cette confusion entre le second paramètre étant parfois le corps HTTP et une autre fois tout l'objet config
pour axios
est due à la manière dont les règles HTTP ont été implémentées. Parfois, un corps HTTP n'est pas nécessaire pour qu'un appel HTTP soit considéré comme valide.
Pour supprimer, vous devrez faire comme suit
axios.delete("/<your endpoint>", { data:<"payload object">}})
Cela a fonctionné pour moi.
J'ai rencontré le même problème ... Je l'ai résolu en créant une instance axios personnalisée. et en utilisant cela pour faire une demande de suppression authentifiée.
const token = localStorage.getItem('token');
const request = axios.create({
headers: {
Authorization: token
}
});
await request.delete('<your route>, { data: { <your data> }});