处理尝试捕获axios拦截器

时间:2020-09-25 04:49:33

标签: node.js reactjs axios try-catch response

我在Node中有一个React应用和一个API。对于登录,在API中,我创建令牌并将令牌刷新为仅HTTP cookie。我也使用csurf。因此,当令牌过期时,如果用户尝试访问某些私有路由,他将收到错误401。因此,我想使用axios拦截器来处理此问题。如果令牌已过期并返回401,则axios应访问资源“ / token”以生成一个新令牌。如果我假设在不使用try catch的情况下,生成新令牌的过程中不会发生任何错误,则请求成功,但是此请求可能会失败并返回401错误,例如,发送的用户ID可能与刷新令牌用户不匹配ID。如果发生错误,我要注销。 有人可以帮忙吗?

 api.interceptors.response.use(
    (response) => {
      return response;
    },
    async (err) => {
      const userStorage = localStorage.getItem('@user');

      if (!userStorage) {
        return Promise.reject(err);
      }

      const { id } = JSON.parse(userStorage);

      const originalReq = err.config;

      if (err.response.status === 401) {
        try {
          const response = await api.post(
            `${process.env.REACT_APP_API_URL}/sessions/token`,
            { id },
          );
          updateUser(response.data.user);
          originalReq._retry = true;
          return api(originalReq);
        } catch (error) {
          return api.delete(
            `${process.env.REACT_APP_API_URL}/sessions/logout`,
            {},
          );
        }
      }

      return Promise.reject(err);
    },
  );

0 个答案:

没有答案