Я использую редукционный подход в реакции. Я звоню 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;
});
}