web-dev-qa-db-fra.com

Passage des en-têtes avec axios POST demande [ReactJS]

J'ai écrit une requête axios POST recommandée dans la documentation du paquet npm, telle que

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

Et cela fonctionne, mais maintenant j'ai modifié mon API backend pour accepter les en-têtes 

Type de contenu: 'application/json'

Autorisation: 'JWT fefege ...'

Maintenant, cette requête marche bien sur POSTMAN, mais lors de la rédaction d'un appel axios, je suis ce lien et n'arrive pas à le faire fonctionner.

Je reçois continuellement 400 BAD Request error

Voici ma demande modifiée

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

Toute aide est grandement appréciée

Merci d'avance.

32
Jagrati

Lorsque vous utilisez axios, pour passer des en-têtes personnalisés, fournissez un objet contenant les en-têtes en dernier argument.

Modifiez votre demande axios comme

        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})
            })
60
Shubham Khatri

Voici un exemple complet d'une demande axios.post avec des en-têtes personnalisés

var postData = {
  email: "[email protected]",
  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);
})

15
Matthew Rideout

La réponse de Shubham n'a pas fonctionné pour moi. 

Lorsque vous utilisez la bibliothèque axios et que vous passez des en-têtes personnalisés, vous devez créer des en-têtes en tant qu’objet avec le nom de clé "en-têtes". La clé d'en-tête doit contenir un objet, ici le type de contenu et l'autorisation.

L'exemple ci-dessous fonctionne bien.

    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
Hemadri Dasari

Ou, si vous utilisez une propriété du prototype de vuejs qui ne peut pas être lue lors de la création, vous pouvez également définir des en-têtes et écrire i.e.

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");
                })
            }
        },
0
Dach0

Json doit être mis en forme avec des guillemets

Comme: 

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

Pas seulement: 

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