import axios, { isAxiosError } from 'axios'; import { hc } from 'hono/client' import type { AuthRoutes, UserRoutes, RoleRoutes } from '@/server/api'; // 创建 axios 适配器 const axiosFetch = async (url: RequestInfo | URL, init?: RequestInit) => { const requestHeaders:Record = {}; if(init?.headers instanceof Headers) { init.headers.forEach((value, key) => { requestHeaders[key] = value; }) } const response = await axios.request({ url: url.toString(), method: init?.method || 'GET', headers: requestHeaders, data: init?.body, }).catch((error) => { console.log('axiosFetch error', error) if(isAxiosError(error)) { return { status: error.response?.status, statusText: error.response?.statusText, data: error.response?.data, headers: error.response?.headers } } throw error; }) const responseHeaders = new Headers(); if (response.headers) { for (const [key, value] of Object.entries(response.headers)) { responseHeaders.set(key, value); } } // 处理204 No Content响应,不设置body const body = response.status === 204 ? null : responseHeaders.get('content-type')?.includes('application/json') ? JSON.stringify(response.data) : response.data; return new Response( body, { status: response.status, statusText: response.statusText, headers: responseHeaders } ) } export const authClient = hc('/', { fetch: axiosFetch, }).api.v1.auth; export const userClient = hc('/', { fetch: axiosFetch, }).api.v1.users; export const roleClient = hc('/', { fetch: axiosFetch, }).api.v1.roles;