Передача заголовков с аксиальным запросом POST
Я написал POST-запрос axios в соответствии с рекомендациями из документации пакета 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, чтобы принимать заголовки.
Content-Type: 'application/json'
Authorization: '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})
})
Любая помощь очень ценится.
Ответы
Ответ 1
При использовании 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
})
})
Ответ 2
Вот полный пример запроса axios.post с пользовательскими заголовками
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);
})
Ответ 3
Shubham ответ не работал для меня.
Когда вы используете библиотеку axios и передаете пользовательские заголовки, вам необходимо создать заголовки как объект с ключевым словом "заголовки". Ключ заголовков должен содержать объект, здесь это Content-Type и Authorization.
Ниже пример работает нормально.
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})
})
Ответ 4
Или, если вы используете какое-то свойство из прототипа 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");
})
}
},
Ответ 5
Это может быть полезно,
const data = {
email: "[email protected]",
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);
})
Ответ 6
Json должен быть отформатирован в двойных кавычках
Подобно:
headers: {
"Content-Type": "application/Jason",
"Authorization": "JWT fefege..."
}
Не просто:
headers: {
'Content-Type': 'application/json',
'Authorization': 'JWT fefege...'
}