이것은 어리석은 것처럼 보이지만 Axios에서 요청이 실패하면 오류 데이터를 얻으려고합니다.
axios.get('foo.com')
.then((response) => {})
.catch((error) => {
console.log(error) //Logs a string: Error: Request failed with status code 404
})
문자열 대신 상태 코드와 내용이있는 객체를 얻을 수 있습니까? 예를 들면 다음과 같습니다.
Object = {status: 404, reason: 'Not found', body: '404 Not found'}
답변
당신이 보는 것은 객체 의 toString
메소드에 의해 반환되는 문자열 error
입니다. ( error
문자열이 아닙니다.)
서버로부터 응답을 받으면 error
객체에 다음 response
속성 이 포함 됩니다.
axios.get('/foo')
.catch(function (error) {
if (error.response) {
console.log(error.response.data);
console.log(error.response.status);
console.log(error.response.headers);
}
});
답변
@Nick이 말했듯 console.log
이 JavaScript Error
객체를 사용할 때 표시되는 결과 는의 정확한 구현에 console.log
따라 다르며 (imo) 오류를 확인하는 것은 매우 성가신 일입니다.
전체 Error
객체와 toString()
메소드를 우회하는 모든 정보 를 보려면 JSON.stringify 만 사용할 수 있습니다 .
axios.get('/foo')
.catch(function (error) {
console.log(JSON.stringify(error))
});
답변
이 인터셉터를 사용하여 오류 응답을 얻습니다.
const HttpClient = axios.create({
baseURL: env.baseUrl,
});
HttpClient.interceptors.response.use((response) => {
return response;
}, (error) => {
return Promise.resolve({ error });
});
답변
TypeScript를 사용하면 올바른 유형으로 원하는 것을 쉽게 찾을 수 있습니다.
import { AxiosResponse, AxiosError } from 'axios'
axios.get('foo.com')
.then(response: AxiosResponse => {
// Handle response
})
.catch((reason: AxiosError) => {
if (reason.response!.status === 400) {
// Handle 400
} else {
// Handle else
}
console.log(reason.message)
})
답변
스프레드 연산자 ( ...
)를 사용하여 다음과 같이 새 객체로 만들 수 있습니다.
axios.get('foo.com')
.then((response) => {})
.catch((error) => {
console.log({...error})
})
주의 : 이것은 오류의 인스턴스가 아닙니다.
답변
이것은 알려진 버그입니다. "axios": "0.13.1"
https://github.com/mzabriskie/axios/issues/378
나는 같은 문제가있어서을 사용했다 "axios": "0.12.0"
. 그것은 나를 위해 잘 작동합니다.
답변
validateStatus
request config에 새로운 옵션이 있습니다 . status <100 또는 status> 300 (기본 동작) 인 경우 예외를 발생시키지 않도록 지정할 수 있습니다. 예:
const {status} = axios.get('foo.com', {validateStatus: () => true})