Cela peut sembler stupide, mais j'essaie d'obtenir les données d'erreur lorsqu'une demande échoue dans Axios.
axios.get('foo.com')
.then((response) => {})
.catch((error) => {
console.log(error) //Logs a string: Error: Request failed with status code 404
})
Au lieu de la chaîne, est-il possible d'obtenir un objet avec peut-être le code d'état et le contenu? Par exemple:
Object = {status: 404, reason: 'Not found', body: '404 Not found'}
Ce que vous voyez est la chaîne renvoyée par la méthode toString
de l'objet error
. (error
n'est pas une chaîne.)
Si une réponse a été reçue du serveur, l'objet error
contiendra la propriété 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);
}
});
Comme @Nick l'a dit, les résultats que vous voyez lorsque vous console.log
un objet JavaScript Error
dépendent de l'implémentation exacte de console.log
, qui varie et (imo) rend les erreurs de vérification extrêmement gênantes.
Si vous souhaitez voir tout l'objet Error
et toutes les informations qu'il contient en contournant la méthode toString()
, vous pouvez simplement utiliser JSON.stringify :
axios.get('/foo')
.catch(function (error) {
console.log(JSON.stringify(error))
});
J'utilise ces intercepteurs pour obtenir la réponse d'erreur.
const HttpClient = axios.create({
baseURL: env.baseUrl,
});
HttpClient.interceptors.response.use((response) => {
return response;
}, (error) => {
return Promise.resolve({ error });
});
C'est un bug connu, essayez d'utiliser "axios": "0.13.1"
https://github.com/mzabriskie/axios/issues/378
J'ai eu le même problème alors j'ai fini par utiliser "axios": "0.12.0"
. Ça fonctionne bien pour moi.