Проходження заголовків із axios POST-запитом


134

Я написав запит на пошту axios POST, як рекомендовано в документації на пакет npm, наприклад:

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

І це працює, але тепер я змінив свій бекенд-API, щоб прийняти заголовки.

Тип вмісту: 'application / json'

Авторизація: "JWT fefege ..."

Тепер цей запит справно працює на Postman, але, пишучи дзвінок в axios, я переходжу за цим посиланням і не можу повністю змусити його працювати.

Я постійно отримую 400 BAD Requestпомилки.

Ось мій модифікований запит:

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

Будь-яка допомога дуже цінується.

Відповіді:


242

Використовуючи axios, щоб передавати власні заголовки, подайте об’єкт, що містить заголовки як останній аргумент

Змініть запит на axios, наприклад:

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 - це внутрішня помилка сервера, чи можете ви перевірити на сервері, чи надходять заголовки чи є якась інша помилка
Shubham Khatri,

@KishoreJethava, чи можете ви просто занести заголовки на свій сервер і побачити, чи отримуєте ви правильні значення
Shubham Khatri

Вам не потрібно публікувати будь-які дані? Також переконайтеся, що this.state.token містить значення
Shubham Khatri


@ShubhamKhatri, чи можу я попросити вас подивитися тут axiosпов’язане питання: stackoverflow.com/questions/59470085/… ?
Істіаке Ахмед

37

Ось повний приклад запиту axios.post із спеціальними заголовками

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


зіткнувшись з цим питанням для отримання запиту. Відповідь надходить у форматі xml. Це не вирішує проблему.
Eswar

3

Це може бути корисно,

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);
 })
Примітка: Усі коди статусу вище 400 будуть зафіксовані в блоці спіймання Axios. Крім того, заголовки необов’язкові для методу публікації в Axios

Блок-котирування

Блок-котирування


2

Відповідь Shubham не працювала для мене.

Коли ви використовуєте бібліотеку axios і передаєте власні заголовки, вам потрібно сконструювати заголовки як об’єкт з ключовою назвою "заголовки". Ключ заголовків повинен містити об'єкт, тут це Тип вмісту та Авторизація.

Нижче приклад працює добре.

    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

Ви також можете використовувати перехоплювачі для передачі заголовків

Це може заощадити багато коду

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

Я б запропонував використовуватиconfig.method.toUpperCase()
Костянтин

@Constantine Я думаю, що це вже
велика

На жаль, моя була нижчою
Костянтин

0

Або, якщо ви використовуєте якесь властивість з прототипу vuejs, яке не можна прочитати при створенні, ви також можете визначити заголовки та написати, тобто

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 має бути відформатований подвійними лапками

Подібно до:

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

Не лише:

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

Це справедливо для формату JSON, але, використовуючи JavaScript, ви можете писати рядки javascript, як тільки хочете, і все одно буде працювати - адже серіалізатор JSON в axios не знає різниці! :-)
Jono
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.