Почему ошибки 401 не улавливаются функцией fetch вactJS? - PullRequest
0 голосов
/ 26 апреля 2019

Я использую редукционный подход в реакции. Я звоню getRolesPagination () с сервисом getRolesPagination () и передачей handleResponse () в сервис для обнаружения ответа / ошибки. Он работает нормально, но когда сервер отвечает с ошибкой состояния 401 , он не улавливает ошибку. Я должен поймать его, чтобы выйти из системы пользователя, потому что если токен пользователя становится недействительным, то сервер отвечает 401 статусом и

"{error: Unauthorized}"

function getRolesPagination(page, filter, sort, pageSize){
    return dispatch => {
        dispatch(request())
        roleService.getRolesPagination(page, filter, sort, pageSize)
        .then(
            response => {
                dispatch(success(response));
            },
            error => {
                dispatch(failure(error));
                dispatch(alertActions.error(error));
            }
        );
    };



function request() { return { type: adminConstants.PAGINATION_ROLES_REQUEST } }
    function success(response)   { return { type: adminConstants.PAGINATION_ROLES_SUCCESS, payload:response } }
    function failure(error) { return { type: adminConstants.PAGINATION_ROLES_FAILURE, payload:error } }
}

Функция roleService.getRolesPagination:

function getRolesPagination(page, filter, sort, pageSize){
    const requestOptions = {
        method  : 'GET',
        headers : authHeader()
    };Why 401 errors is not getting caught with the fetch function in reactJS?
    return fetch(baseUrl+'roles?page='+page+'&filter='+filter+'&sort='+sort+'&pageSize='+pageSize, requestOptions).then(handleResponse);
}

Функция handleResponse:

 export function handleResponse(response) {
        return response.json().then(data => {

            if (!response.ok) {
                if (response.status === 401) {
                    localStorage.removeItem('user');
                    window.location.reload(true);
                }
                const error = (data && data.error) || response.statusText;
                return Promise.reject(error);
            }
            return data;
        });
    }

1 Ответ

0 голосов
/ 26 апреля 2019

проверьте статус ответа, 401 является действительным ответом сервера, он не будет перехватывать блок

fetch(request)
.then(function(response) {
 if (response.status !== 200) {
  /*your code */
 }else{
   throw new Error(response.status) 
}
})
.catch(function(error) {
    /*logout logic*/
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...