Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

on fail I'm not getting error response's data #108

Open
NishantDesai1306 opened this issue Sep 23, 2019 · 6 comments
Open

on fail I'm not getting error response's data #108

NishantDesai1306 opened this issue Sep 23, 2019 · 6 comments

Comments

@NishantDesai1306
Copy link

I am trying to use this lib for my dummy app which has basic login functionality, I'm using https://reqres.in for mocking the API.

now on LOGIN_UNSUCCESSFUL response the API sends {error: 'user not found'}, but I am not getting error.response.data in dispatched action.

My setup

const client = axios.create({
	baseURL: BASE_URL,
	responseType: 'json'
});

return createStore(
	rootReducer,
        applyMiddleware(
                axiosMiddleware(client),
        ),
);

the only keys that are present in action object which gets dispatched on failure are ['message', 'name', 'description', 'fileName', 'lineNumber', 'columnNumber', 'stack', 'config', 'code']

@pathikmehta
Copy link

I am facing the same problem.
In case of error it is just giving "error": [Error: Request failed with status code 401] in action.error but it is not providing the actual response object from which I can fetch some data, parameter which is set by the server.

I also tried to get that in the promise's catch block. But it looks like it is not executing catch block even if the request is getting 401 or similar error response back. Even in such failure cases, it is executing the then block of promise considering the request is succeeded.

So currently, I don't see any way to get the actual response in case of failures.

@NishantDesai1306
Copy link
Author

NishantDesai1306 commented Oct 1, 2019

I ended up using onError callback and then dispatching REQ_FAIL manually from there, and this callback function can access the actual axios's response so you can add whatever you like in the payload of the dispatched action.

It's not a solution but a workaround to make my project workable till I get a proper solution.

// example action
export const login = (email, password) => {
  return {
    type: LOGIN,
    payload: {
      request: {
        method: 'POST',
        url: '/login',
        data: {
          email,
          password,
        },
        options: {
          onError({ getState, dispatch, error }) {
            dispatch({
              type: LOGIN_FAIL,
              payload: error.response
            });
          },
        }
      },
    }
  }
}

@Overdozed
Copy link

Overdozed commented Oct 15, 2019

General solution:
axiosMiddleware(client, { onError: ({ action, dispatch, error: { message } }) => { dispatch({ type: action.type + '_FAIL', payload: { error: message } }); } })

@matviishyn
Copy link

Check my answer on #87

@adrielFab
Copy link

adrielFab commented May 19, 2020

u can grab it in the component by doing

try {
   await login()
} catch(e) {
 log( e.error.response )
}

the value returned gives

{
 data: {},
 status: ###,
}

im also on version 4.0.1

@acrosson
Copy link

acrosson commented Jun 9, 2020

Has anyone figured this out? The data property is null for me. I tried @Overdozed approach, but i'm only getting a generic message, not the string thats in the body response.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants