nuxtjs中的ofetch怎么做无感刷新

erhj 发布于 11/17 12:48
阅读 62
收藏 0

鸿蒙原生应用开发者激励计划发布!最高获百万现金!点击立即参与

接口返回401就会进入onResponseError函数,在onResponseError里面会刷新token并重新发送请求,但是不管这个函数返回什么结果请求处理函数都会收到reject。

export default defineNuxtPlugin((nuxtApp) => {
  const settings = useSettings();
  const api: ReturnType<typeof $fetch.create> = $fetch.create({
    onResponseError: async ({ request, options, error, response }) => {
      const route = useRoute();
      let data = response._data;

      if (response.status === 401) {
        const result = await api("/api/auth/refreshToken");
        if (result.success) {
          return api(request, options);
        } else {
          await nuxtApp.runWithContext(() =>
            navigateTo(`/login/?redirectUri=${route.fullPath}`, { replace: true }),
          );
        }
      } else {
        const toast = useToast();
        toast.add({
          color: "red",
          title: `${response.status} ${response.statusText}`,
          description: data.message,
          icon: "i-heroicons-x-mark-20-solid",
        });
      }

      return Promise.reject(response._data);
    },
  });

  return {
    provide: {
      api,
    },
  };
});

 

 

加载中
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部