Axios Anfrage mit Body und Headern löschen?


105

Ich verwende Axios während der Programmierung in ReactJS und gebe vor, eine DELETE-Anfrage an meinen Server zu senden.

Dazu brauche ich die Header:

headers: {
  'Authorization': ...
}

und der Körper besteht aus

var payload = {
    "username": ..
}

Ich habe in den Interwebs gesucht und nur festgestellt, dass die DELETE-Methode einen "Parameter" erfordert und keine "Daten" akzeptiert.

Ich habe versucht, es so zu senden:

axios.delete(URL, payload, header);

oder auch

axios.delete(URL, {params: payload}, header);

Aber nichts scheint zu funktionieren ...

Kann mir jemand sagen, ob es möglich ist (ich nehme an, dass es möglich ist), eine DELETE-Anfrage mit Headern und Body zu senden, und wie das geht?

Danke im Voraus!

Antworten:


128

Nach einigen Versuchen fand ich es funktioniert.

Bitte folgen Sie der Reihenfolge, es ist sehr wichtig, sonst funktioniert es nicht

axios.delete(URL, {
  headers: {
    Authorization: authorizationToken
  },
  data: {
    source: source
  }
});

98

axiox.deleteunterstützt einen Anforderungshauptteil. Es werden zwei Parameter akzeptiert: URL und optionale Konfiguration. Sie können config.dataden Anforderungshauptteil und die Header wie folgt festlegen:

axios.delete(url, { data: { foo: "bar" }, headers: { "Authorization": "***" } });

Siehe hier - https://github.com/axios/axios/issues/897


Die Sache ist, ich möchte einen Körper und Header in der gleichen
— Löschanforderung

75

Hier ist eine kurze Zusammenfassung der Formate, die zum Senden verschiedener http-Verben mit Axios erforderlich sind:

  • GET: Zwei Wege

    • Erste Methode

      axios.get('/user?ID=12345')
        .then(function (response) {
          // Do something
        })
      
    • Zweite Methode

      axios.get('/user', {
          params: {
            ID: 12345
          }
        })
        .then(function (response) {
          // Do something
        })
      

    Die beiden oben genannten sind gleichwertig. Beachten Sie das paramsSchlüsselwort in der zweiten Methode.

  • POST und 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
    )
    

Die zentralen Thesen

  • getAnfragen benötigen optional einen paramsSchlüssel, um die Abfrageparameter richtig einzustellen
  • deleteAnfragen mit einem Körper müssen unter einem dataSchlüssel gesetzt werden

11
Ihre Antwort lässt mich wünschen, dass es eine +2 Upvote-Funktion für den Stapelüberlauf gibt.
— eli-bd

Dies ist die einzige Antwort, die dies ausführlich erklärt. Danke, es hat wirklich geholfen, auch andere zu verstehen.
— Geoff

Wie sende ich eine Löschanforderung mit Params, nicht mit Body?
— MaFiA

Beste Antwort auf diese Frage. Vielen Dank.
— HartleySan

1
@MaFiA, wenn Sie eine Löschanforderung mit Parametern senden möchten. Sie können es einfach mit
— Abfragezeichenfolgen

13

Axios. Löschen wird eine URL und eine optionale Konfiguration übergeben .

axios.delete (url [, config])

Die für die Konfiguration verfügbaren Felder können die Header enthalten .

Dadurch kann der API-Aufruf wie folgt geschrieben werden:

const headers = {
  'Authorization': 'Bearer paperboy'
}
const data = {
  foo: 'bar'
}

axios.delete('https://foo.svc/resource', {headers, data})

Dies funktioniert nicht für mich ... Ich habe const headers = {'Authorization': ...}und am data = {'username': ...}Ende, axios.delete('http://...', {headers, data})aber der Server kann nicht auf die Header zugreifen ...
— Asfourhundred

Die Anfrage des Browsers lautet anders. Siehe diesen Stackblitz ( stackblitz.com/edit/react-gq1maa ) und auch die Anfrage auf der Registerkarte des Browsernetzwerks ( snag.gy/JrAMjD.jpg ). Sie müssen hier sicherstellen, dass Sie die Headerserver-Seite richtig lesen oder dass die Anforderung nicht abgefangen und manipuliert wird.
— Oluwafemi Sule

6

Ich hatte das gleiche Problem, das ich so gelöst habe:

axios.delete(url, {data:{username:"user", password:"pass"}, headers:{Authorization: "token"}})

5

Tatsächlich axios.deleteunterstützt eine Anfrage Körper.
Es werden zwei Parameter akzeptiert: a URLund optional config. Das ist...

axios.delete(url: string, config?: AxiosRequestConfig | undefined)

Sie können den Antworttext für die Löschanforderung wie folgt festlegen:

let config = { 
    headers: {
        Authorization: authToken
    },
    data: { //! Take note of the `data` keyword. This is the request body.
        key: value,
        ... //! more `key: value` pairs as desired.
    } 
}

axios.delete(url, config)

Ich hoffe das hilft jemandem!


1
Vielen Dank, ich verwende dies in meiner nestJs HttpService-Löschmethode als: this.httpService.delete (apiUrl, {headers: headersRequest, data: deleteBody})
— shanti

4

Zum Löschen müssen Sie wie folgt vorgehen

axios.delete("/<your endpoint>", { data:<"payload object">})

Es hat bei mir funktioniert.


2

Um ein HTTP DELETE mit einigen Headern über zu senden, axioshabe ich Folgendes getan:

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

Die axiosSyntax für verschiedene HTTP-Verben (GET, POST, PUT, DELETE) ist schwierig, da der 2. Parameter manchmal der HTTP-Body sein soll. In anderen Fällen (wenn er möglicherweise nicht benötigt wird) übergeben Sie einfach die Header als 2. Parameter .

Angenommen, Sie müssen eine HTTP-POST-Anforderung ohne HTTP-Body senden und dann undefinedals zweiten Parameter übergeben.

Beachten Sie, dass Sie gemäß der Definition des Konfigurationsobjekts ( https://github.com/axios/axios#request-config ) databeim Aufrufen weiterhin einen HTTP-Body im HTTP-Aufruf über das Feld übergeben können axios.delete, jedoch für das HTTP DELETE Verb wird ignoriert.

Diese Verwechslung zwischen dem zweiten Parameter, der manchmal der HTTP-Body ist, und einem anderen Zeitpunkt, für den das gesamte configObjekt axiosist, ist darauf zurückzuführen, wie die HTTP-Regeln implementiert wurden. Manchmal wird kein HTTP-Body benötigt, damit ein HTTP-Aufruf als gültig angesehen wird.


0

Ich bin auf dasselbe Problem gestoßen ... Ich habe es gelöst, indem ich eine benutzerdefinierte Axios-Instanz erstellt habe. und damit eine authentifizierte Löschanforderung stellen ..

const token = localStorage.getItem('token');
const request = axios.create({
        headers: {
            Authorization: token
        }
    });

await request.delete('<your route>, { data: { <your data> }});

0

Ich habe all das ausprobiert, was bei mir nicht funktioniert hat. Am Ende habe ich mich nur für PUT entschieden (Inspiration hier ) und meine serverseitige Logik geändert, um einen Löschvorgang für diesen URL-Aufruf durchzuführen. (Django Rest Framework Funktion überschreiben).

z.B

.put(`http://127.0.0.1:8006/api/updatetoken/20`, bayst)
      .then((response) => response.data)
      .catch((error) => { throw error.response.data; });

-1

Ich habe einen Weg gefunden, der funktioniert:

axios
      .delete(URL, {
        params: { id: 'IDDataBase'},
        headers: {
          token: 'TOKEN',
        },
      }) 
      .then(function (response) {
        
      })
      .catch(function (error) {
        console.log(error);
      });

Ich hoffe diese Arbeit auch für dich.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.