2016-08-25 47 views
30

这看起来很愚蠢,但我试图在Axios中请求失败时获取错误数据。如何从Axios中的http错误获取状态码?

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

回答

65

你看到的是error对象的toString方法返回的字符串。 (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); 
    } 
    }); 
+1

如果我没有引用'response'属性,你能解释一下它自动变成一个字符串吗? –

+1

'console.log'使用'toString'方法来格式化'Error'对象。它与提到'response'属性无关。 –

+1

我仍然困惑,这是否对错误对象或?如果我console.log一个对象,我得到的对象,而不是一个字符串。 –

1

这是一个已知的bug,尝试使用"axios": "0.13.1"

https://github.com/mzabriskie/axios/issues/378

我有同样的问题,所以我结束了使用"axios": "0.12.0"。这对我来说可以。

+0

这不是我有同样的问题,有甚至没有一个对象,当我登录'错误' –

3

我使用这个拦截器,以获得错误响应。

const HttpClient = axios.create({ 
    baseURL: env.baseUrl, 
}); 

HttpClient.interceptors.response.use((response) => { 
    return response; 
}, (error) => { 
    return Promise.resolve({ error }); 
}); 
6

正如@Nick说,你看到的结果,当你console.log一个JavaScript Error对象依赖于具体实现的console.log,其变化和(IMO),使检查错误令人难以置信的烦人。

如果您想看到完整的Error对象和所有它承载绕过toString()方法的信息,你可以只使用JSON.stringify

axios.get('/foo') 
    .catch(function (error) { 
    console.log(JSON.stringify(error)) 
    });