axios POST 요청으로 헤더 전달


134

다음과 같은 npm 패키지 문서에서 권장하는대로 axios POST 요청을 작성했습니다.

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 카트리

올바른 값을 얻는 경우 @KishoreJethava, 당신은 당신의 서버에 헤더를 기록하고 볼 수 있습니다
하기 Shubham 카트리을

데이터를 게시 할 필요가 없습니까? 또한 있는지 확인 this.state.token는 값을 포함
하기 Shubham 카트리


@ShubhamKhatri, axios여기에 관련 질문을 보도록 요청할 수 있습니까? stackoverflow.com/questions/59470085/…
Istiaque Ahmed

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 catch 블록에 포함됩니다. 또한 헤더는 Axios의 게시 방법에 대해 선택 사항입니다.

인용구

인용구


2

Shubham 대답은 나를 위해 작동하지 않았습니다.

axios 라이브러리를 사용하고 사용자 정의 헤더를 전달하려면 키 이름이 "headers"인 객체로 헤더를 구성해야합니다. 헤더 키는 객체를 포함해야합니다. 여기서는 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})
        })

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

@Constantine 나는 이미 대문자라고 생각합니다
Israel kusayev

불행히도 내 것은 낮았다
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를 사용할 때 원하는대로 자바 스크립트 문자열을 작성할 수 있으며 여전히 작동합니다. axios의 JSON 직렬 변환기는 차이를 모르기 때문입니다! :-)
Jono 2019
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.