web-dev-qa-db-fra.com

Comment puis-je obtenir le code d'état d'une erreur http dans Axios?

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'}
113
Sebastian Olsen

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);
    }
  });
202
Nick Uraltsev

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))
  });
12
danii

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 });
});
5
Tan

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.

1
Dmitriy Nevzorov