Meneruskan header dengan permintaan POST axios


135

Saya telah menulis permintaan POST axios seperti yang direkomendasikan dari dokumentasi paket npm seperti:

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

Dan berhasil, tapi sekarang saya telah memodifikasi API backend saya untuk menerima header.

Jenis Konten: 'application / json'

Otorisasi: 'JWT fefege ...'

Sekarang, permintaan ini berfungsi dengan baik di Postman, tetapi ketika menulis panggilan axios, saya mengikuti tautan ini dan tidak bisa membuatnya berfungsi.

Saya terus menerus mendapatkan 400 BAD Requestkesalahan.

Ini permintaan saya yang telah diubah:

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

Bantuan apa pun sangat dihargai.

Jawaban:


242

Saat menggunakan axios, untuk meneruskan header kustom, berikan objek yang berisi header sebagai argumen terakhir

Ubah permintaan axios Anda seperti:

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

@KishoreJava, 500 adalah kesalahan server internal, dapatkah Anda memeriksa di sisi server jika header datang atau apakah ada bug lain
Shubham Kri

@KishoreJava, dapatkah Anda mencatat header di server Anda dan melihat apakah Anda mendapatkan nilai yang benar
Shubham Khatri

Apakah Anda tidak perlu memposting data apa pun? Pastikan juga this.state.token berisi nilai
Shubham Khatri


@ShubhamKhatri, bolehkah saya meminta Anda untuk melihat axiospertanyaan terkait di sini: stackoverflow.com/questions/59470085/… ?
Istiaque Ahmed

37

Berikut adalah contoh lengkap permintaan axios.post dengan header kustom

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


menghadapi masalah ini untuk mendapatkan permintaan. Responsnya datang dalam format xml. Ini tidak menyelesaikan masalah.
Eswar

3

Ini mungkin bisa membantu,

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);
 })
Catatan: Semua kode status di atas 400 akan ditangkap di blok tangkapan Axios. Selain itu, header bersifat opsional untuk metode posting di Axios

Blockquote

Blockquote


2

Jawaban Shubham tidak berhasil untukku.

Saat Anda menggunakan pustaka axios dan meneruskan tajuk khusus, Anda perlu membuat tajuk sebagai objek dengan nama kunci "tajuk". Kunci tajuk harus berisi objek, ini adalah Jenis Konten dan Otorisasi.

Contoh di bawah ini berfungsi dengan baik.

    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

Anda juga dapat menggunakan interseptor untuk meneruskan header

Ini dapat menghemat banyak kode

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

Saya akan menyarankan untuk menggunakanconfig.method.toUpperCase()
Constantine

@Constantine Saya pikir itu sudah huruf besar
Israel kusayev

Sayangnya, milik saya lebih rendah
Constantine

0

Atau, jika Anda menggunakan beberapa properti dari prototipe vuejs yang tidak dapat dibaca saat pembuatan, Anda juga dapat menentukan header dan menulis 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 harus diformat dengan tanda kutip ganda

Suka:

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

Tidak hanya:

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

Itu benar untuk format JSON tetapi ketika menggunakan javascript, Anda dapat menulis string javascript sesuka Anda dan itu akan tetap berfungsi - karena serializer JSON di axios tidak tahu perbedaannya! :-)
Jono
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.