How to catch the body of an AXIOS error
Tags: javscript, axios
Published: 2020-09-19 19:23:03

---
title: How to catch the body of an AXIOS error 
published: true
description: Fully understand AXIOS error messages, to speed up your development and support UX.
tags: Javscript, AXIOS
canonical_url: https://zelig880.com/how-to-catch-the-body-of-an-error-in-axios
cover_image: 
---

If you have been searching the web for some information about AXIOS error messages, and would like to understand how to use them, then you have come to the right place.

[TLTR; Find the code snippets in the following section](#ajax-request-returned-with-error)

If you search the web on this topic, all you can find is:

- [catching error body using axios post](https://stackoverflow.com/questions/45017822/catching-error-body-using-axios-post)
- [Unable to catch the body of error](https://github.com/axios/axios/issues/1369)
- [JS Axios – how to get response body in event of error?](https://stackoverflow.com/questions/53620625/js-axios-how-to-get-response-body-in-event-of-error)
- [How to see axios error response JSON in React](https://stackoverflow.com/questions/55346859/how-to-see-axios-error-response-json-in-react)

The list could have gone on and on, but they all ask for the sample simple question:

> How can someone get the actual error information coming from a bad request made with AXIOS.

In this post we are going to provide information on “why” so many people ask for information, and “how” this information can be found.

Why so many people ask for this
-------------------------------

If you have ever worked with an api, you perfectly know that request not always go to plan. You hope to always get a lovely response with a status of 200, but this does not always happens.

In many instances the status of our request may return some kind of error (400, 500), and when this happens we would like to be able to have a readable error message.

```
axios.get('EndpointWithAuthorizedError')
    .then((response) => {})
    .catch((error) => {
        console.log(error);
    })
```


Unfortunately if the above would ever fail with a meaningful error, we would still see this within our console, as the variable passed by the catch statement seem to be of type “string”.

```
Error: Request failed with status code 401
```


This is actually the main reason why so many people are “forced” to ask for help.

How can we process AXIOS error message
--------------------------------------

There is actually no magic when processing the error messages. In fact, the catch is in the fact that the variable received by the `catch` statement seem to be a string, but in reality it is not.

The AXIOS error message can actually return 3 different structure, depending from what kind of failure it has (crazy right… I thought that too).

### Error in setting up the request

This error can happen if we have made an actual mistake in setting up the AXIOS request. It could be something with the data passed, or a configuration setting.

When this happen we can actually find the information we need by accessing the `message` parameter of the catch.

```
axios.get('wrongSetup')
    .then((response) => {})
    .catch((error) => {
        console.log(error.message);
    })

//or using destructuring
axios.get('wrongSetup')
    .then((response) => {})
    .catch(({message) => {
        console.log(message);
    })
```


### No response – Network Error

This scenario will take place when our request had no response at all. This can happen when the URL is incorrect, or if the receiving server is down.

When this happen we can access more information about our request bu accessing the `request` parameter. This will return the actual “request” information.

```
axios.get('network error')
     .then((response) => {})
     .catch((error) => {
         console.log(error. request );
     })
//or using destructuring
 axios.get('network error')
     .then((response) => {})
     .catch(({ request ) => {
         console.log( request );
     })
```


### Request returned with an error status 

This is one of the most common, or more specifically the one type of “error” that need to be manage to make sure our web applications function properly.

There are hundreds of status code differently than 200 (https://developer.mozilla.org/en-US/docs/Web/HTTP/Status), that would fit in this category. I am going to list below the most important:

- **400:** Bad request
- **401:** Unauthorized
- **403:** Forbidden
- **404:**  Not Found
- **500:** Internal Server error
- **502:** Bad Gateway

When any of the above happen, we would like to know more about the request. In this case there are more information provided to us: `data`, `status`, `header`.

```
axios.get('errorStatus')
     .then((response) => {})
     .catch((error) => { 
         console.log(error.response.data);  
         console.log(error.response.status);  
         console.log(error.response.headers); 
     })

//or using destructuring
 axios.get('errorStatus')
     .then((response) => {})
     .catch(({ response }) => { 
         console.log(response.data);  
         console.log(response.status);  
         console.log(response.headers);  
     })
```


With the above code, we will be able to get all the information we need about the response to our request. These includes the status code, the header and last but not least the data that the server has sent with the request.

When using any kind of API, the `data` parameter is going to include essential information, usually used for development purposes, but at times also good to show to the end users.

I hope to have saved you some time, and please feel free to comment, or provide suggestion to improve this post and help future readers