0.0.1 • Published 10 months ago

openapi-ofetch v0.0.1

Weekly downloads
-
License
-
Repository
-
Last release
10 months ago

openapi-ofetch

缘由

原作者太固执了,太追求极简,导致最终的效果很差,缺少了很多常用的功能,而且和其他库集成也很不方便。

例子

import { ofetch } from 'ofetch';
import useAuthStore from '@/hooks/useAuthStore';
import createClient from './OpenapiOfetch';
import { paths } from './schema';

const httpClient = ofetch.create({
  baseURL: import.meta.env.VITE_API_HOST.trim(),
  retryStatusCodes: [401],
  async onRequest(context) {
    const { options } = context;
    const info = useAuthStore.getState();
    // todo: try to prevent expired token. and refresh them,
    options.headers = new Headers(options.headers);
    if (info.token) {
      options.headers.set('Authorization', `Bearer ${info.token}`);
    }
  },
  async onResponseError(context) {
    const { request, response, options } = context;
    // Log error
    const info = useAuthStore.getState();
    if (response.status === 401) {
      // 更改用户状态.
      // 我们要刷新用户的token
      const refreshResp = await fetch(`${import.meta.env.VITE_API_HOST}/auth/refresh`, {
        headers: {
          Authorization: `Bearer ${info.refreshToken}`,
        },
        method: 'post',
      });
      const refreshJson = await refreshResp.json();
      //
      info.onLogin(refreshJson);
      /*       // 执行完毕后,我们需要重新发送原本的请求
      const tempResponse = await httpClient(request, options);
      context.response = tempResponse */
    }
  },
});

// ok done.
export const apiClient = createClient<paths>(httpClient);
0.0.1

10 months ago