Übergeben von Headern mit POST-Anforderung von axios


133

Ich habe eine Axios-POST-Anfrage geschrieben, wie in der Dokumentation zum npm-Paket empfohlen:

var data = {
    'key1': 'val1',
    'key2': 'val2'
}
axios.post(Helper.getUserAPI(), data)       
.then((response) => {
    dispatch({type: FOUND_USER, data: response.data[0]})
})
.catch((error) => {
    dispatch({type: ERROR_FINDING_USER})
})

Und es funktioniert, aber jetzt habe ich meine Backend-API so geändert, dass sie Header akzeptiert.

Inhaltstyp: 'application / json'

Autorisierung: 'JWT fefege ...'

Nun, diese Anfrage funktioniert gut bei Postman, aber wenn ich einen Axios-Anruf schreibe, folge ich diesem Link und kann ihn nicht ganz zum Laufen bringen.

Ich bekomme ständig 400 BAD RequestFehler.

Hier ist meine geänderte Anfrage:

axios.post(Helper.getUserAPI(), {
    headers: {
        'Content-Type': 'application/json',
        'Authorization': 'JWT fefege...'
    },
    data
})      
.then((response) => {
    dispatch({type: FOUND_USER, data: response.data[0]})
})
.catch((error) => {
    dispatch({type: ERROR_FINDING_USER})
})

Jede Hilfe wird sehr geschätzt.

Antworten:


240

Geben Sie bei Verwendung von Axios ein Objekt an, das die Header als letztes Argument enthält, um benutzerdefinierte Header zu übergeben

Ändern Sie Ihre Axios-Anfrage wie folgt:

const headers = {
  'Content-Type': 'application/json',
  'Authorization': 'JWT fefege...'
}

axios.post(Helper.getUserAPI(), data, {
    headers: headers
  })
  .then((response) => {
    dispatch({
      type: FOUND_USER,
      data: response.data[0]
    })
  })
  .catch((error) => {
    dispatch({
      type: ERROR_FINDING_USER
    })
  })

@ KishoreJethava, 500 ist interner Serverfehler, können Sie auf der Serverseite überprüfen, ob Header kommen oder gibt es einen anderen Fehler
— Shubham Khatri

@ KishoreJethava, können Sie einfach die Header in Ihrem Server protokollieren und sehen, ob Sie die richtigen Werte erhalten
— Shubham Khatri

Müssen Sie keine Daten veröffentlichen? Stellen Sie außerdem sicher, dass this.state.token einen Wert enthält
— Shubham Khatri


@ShubhamKhatri, darf ich Sie bitten, sich axioshier eine verwandte Frage anzusehen : stackoverflow.com/questions/59470085/… ?
— Istiaque Ahmed

37

Hier ist ein vollständiges Beispiel für eine axios.post-Anforderung mit benutzerdefinierten Headern

var postData = {
  email: "test@test.com",
  password: "password"
};

let axiosConfig = {
  headers: {
      'Content-Type': 'application/json;charset=UTF-8',
      "Access-Control-Allow-Origin": "*",
  }
};

axios.post('http://<host>:<port>/<path>', postData, axiosConfig)
.then((res) => {
  console.log("RESPONSE RECEIVED: ", res);
})
.catch((err) => {
  console.log("AXIOS ERROR: ", err);
})


mit diesem Problem konfrontiert, um eine Anfrage zu erhalten. Die Antwort kommt im XML-Format. Dies löst das Problem nicht.
— Eswar

3

Dies könnte hilfreich sein,

const data = {
  email: "me@me.com",
  username: "me"
};

const options = {
  headers: {
      'Content-Type': 'application/json',
  }
};

axios.post('http://path', data, options)
 .then((res) => {
   console.log("RESPONSE ==== : ", res);
 })
 .catch((err) => {
   console.log("ERROR: ====", err);
 })
Hinweis: Alle Statuscodes über 400 werden im Axios-Fangblock abgefangen. Außerdem sind Header für die Post-Methode in Axios optional

Blockquote

Blockquote


2

Shubham Antwort hat bei mir nicht funktioniert.

Wenn Sie die Axios-Bibliothek verwenden und benutzerdefinierte Header übergeben möchten, müssen Sie Header als Objekt mit dem Schlüsselnamen "Header" erstellen. Der Header-Schlüssel sollte ein Objekt enthalten, hier ist es Inhaltstyp und Autorisierung.

Das folgende Beispiel funktioniert einwandfrei.

    var headers = {
        'Content-Type': 'application/json',
        'Authorization': 'JWT fefege...' 
    }
    axios.post(Helper.getUserAPI(), data, {"headers" : headers})

        .then((response) => {
            dispatch({type: FOUND_USER, data: response.data[0]})
        })
        .catch((error) => {
            dispatch({type: ERROR_FINDING_USER})
        })

1

Sie können auch Interceptors verwenden, um die Header zu übergeben

Es kann Ihnen viel Code sparen

axios.interceptors.request.use(config => {
  if (config.method === 'POST' || config.method === 'PATCH' || config.method === 'PUT')
    config.headers['Content-Type'] = 'application/json;charset=utf-8';

  const accessToken = AuthService.getAccessToken();
  if (accessToken) config.headers.Authorization = 'Bearer ' + accessToken;

  return config;
});

Ich würde vorschlagen,config.method.toUpperCase()
— Constantine

@Constantine Ich denke, es ist bereits Großbuchstaben
— Israel kusayev

Leider war meine niedriger
— Constantine

0

Wenn Sie eine Eigenschaft aus dem vuejs-Prototyp verwenden, die bei der Erstellung nicht gelesen werden kann, können Sie auch Header definieren und schreiben, z

storePropertyMaxSpeed(){
                axios.post('api/property', {
                    "property_name" : 'max_speed',
                    "property_amount" : this.newPropertyMaxSpeed
                    },
                    {headers :  {'Content-Type': 'application/json',
                                'Authorization': 'Bearer ' + this.$gate.token()}})
                  .then(() => { //this below peace of code isn't important 
                    Event.$emit('dbPropertyChanged');

                    $('#addPropertyMaxSpeedModal').modal('hide');

                    Swal.fire({
                        position: 'center',
                        type: 'success',
                        title: 'Nova brzina unešena u bazu',
                        showConfirmButton: false,
                        timer: 1500
                        })
                })
                .catch(() => {
                     Swal.fire("Neuspješno!", "Nešto je pošlo do đavola", "warning");
                })
            }
        },

-4

Json muss mit doppelten Anführungszeichen formatiert werden

Mögen:

headers: {
                "Content-Type": "application/Jason",
                "Authorization": "JWT fefege..."
            }

Nicht nur:

headers: {
                'Content-Type': 'application/json',
                'Authorization': 'JWT fefege...'
         }

Das gilt für das JSON-Format, aber wenn Sie Javascript verwenden, können Sie Javascript-Zeichenfolgen schreiben, wie Sie möchten, und es funktioniert weiterhin - da der JSON-Serializer in Axios den Unterschied nicht kennt! :-)
— Jono
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.