Passaggio di intestazioni con richiesta POST axios


135

Ho scritto una richiesta POST axios come raccomandato dalla documentazione del pacchetto npm come:

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

E funziona, ma ora ho modificato la mia API di backend per accettare le intestazioni.

Tipo di contenuto: "application / json"

Autorizzazione: "JWT fefege ..."

Ora, questa richiesta funziona bene su Postman, ma quando scrivo una chiamata axios, seguo questo collegamento e non riesco a farlo funzionare.

Ricevo costantemente 400 BAD Requesterrori.

Ecco la mia richiesta modificata:

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

Qualsiasi aiuto è molto apprezzato.

Risposte:


242

Quando si utilizza axios, per passare intestazioni personalizzate, fornire un oggetto contenente le intestazioni come ultimo argomento

Modifica la tua richiesta axios come:

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 è un errore interno del server, puoi controllare sul lato server se le intestazioni stanno arrivando o c'è qualche altro bug
Shubham Khatri

@KishoreJethava, puoi semplicemente registrare le intestazioni nel tuo server e vedere se stai ottenendo i valori corretti
Shubham Khatri

Non hai bisogno di inserire dati? Assicurati anche che this.state.token contenga un valore
Shubham Khatri,


@ShubhamKhatri, posso chiederti di dare un'occhiata a una axiosdomanda correlata qui: stackoverflow.com/questions/59470085/… ?
Istiaque Ahmed

37

Ecco un esempio completo di una richiesta axios.post con intestazioni personalizzate

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


affrontare questo problema per ottenere la richiesta. La risposta sta arrivando in formato xml. Questo non risolve il problema.
Eswar

3

Questo potrebbe essere utile,

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);
 })
Nota: tutti i codici di stato superiori a 400 verranno catturati nel blocco di cattura Axios. Inoltre, le intestazioni sono facoltative per il metodo post in Axios

blockquote

blockquote


2

La risposta di Shubham non ha funzionato per me.

Quando si utilizza la libreria axios e per passare intestazioni personalizzate, è necessario costruire intestazioni come un oggetto con il nome di chiave "headers". La chiave delle intestazioni dovrebbe contenere un oggetto, qui è Content-Type e Authorization.

L'esempio seguente funziona bene.

    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

È inoltre possibile utilizzare gli intercettori per passare le intestazioni

Può farti risparmiare molto codice

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

Suggerirei di usareconfig.method.toUpperCase()
Costantino il

@Constantine Penso che sia già maiuscolo
Israel kusayev

Sfortunatamente, il mio era più basso
Costantino il

0

Oppure, se stai usando una proprietà del prototipo di vuejs che non può essere letta durante la creazione, puoi anche definire le intestazioni e scrivere ie

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 deve essere formattato con virgolette doppie

Piace:

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

Non solo:

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

Questo è vero per il formato JSON, ma quando usi javascript, puoi scrivere stringhe javascript come preferisci e funzionerà ancora, perché il serializzatore JSON in axios non conosce la differenza! :-)
Jono
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.