Обработка несанкционированной ошибки 401 в приложении axios реагирует на избыточность - PullRequest
0 голосов
/ 09 января 2019

Я хочу обработать 401 несанкционированную ошибку, когда мой сервер выводит ее, я хочу отправить действие, чтобы сделать это. Я вижу, что многие используют axios.interceptors, как мне это сделать. что такое перехватчики? Пожалуйста, объясните подробно, что это такое, и помогите мне. Я новичок в реагирующе-избыточном каркасе. Вот мой обработчик маршрута в экспрессе:

router.get('/api/me', function(req, res) {

        if(req.user) {
            res.status(200).send({
                email : req.user.local.email,
                isCurrentUser: true
            });
        }else {
            res.status(401).send({
                isCurrentUser: false
            })
        }



})

вот мой создатель асинхронных действий:

export const fetchCurrentUser =  () => {

    return async (dispatch) => {

        const res =  await axios.get(`${ROOT_URL}/me`); 
        if(res.status === 200) {
              dispatch({ type: types.YES_FETCH_CURRENT_USER, payload: res.data });
        }else if(res.status === 401) {
             dispatch({type: types.NO_FETCH_CURRENT_USER})
        }


    }

};

1 Ответ

0 голосов
/ 09 января 2019

Перехватчики - это что-то внутри axios. Вы можете сравнить перехватчики с промежуточным программным обеспечением в экспрессе. Вы используете перехватчики для

  • перехватить запрос перед его выполнением.
  • перехватить ответ, прежде чем он будет обработан вами как Обещание.

Документацию по его использованию можно найти здесь .

В вашем случае вы могли бы сделать что-то вроде:

const aiosInstance = axios.create();

axiosInstance.interceptors.response.use(
  (response) => response,
  (error) => {
    if (error.response.status === 401) {
      // dispatch something to your store
    }

    return Promise.reject(error);
  }
)

axiosInstance.get(`${ROOT_URL}/me`); 

Приведенный выше пример означает, что вы должны импортировать свой экземпляр хранилища избыточности, чтобы напрямую направить на него действие.

Отредактировано мой ответ на основе приведенного ниже разговора:

Попробуйте:

export const fetchCurrentUser =  () => async (dispatch) => {
  try {
    const res = await axios.get(`${ROOT_URL}/me`); 

    dispatch({ type: types.YES_FETCH_CURRENT_USER, payload: res.data });
  } catch (err) {
    dispatch({type: types.NO_FETCH_CURRENT_USER})
  }
};
...