Files
helix-web/src/client/web-client/index.ts
T
2026-01-05 10:10:51 +08:00

44 lines
1.1 KiB
TypeScript

import axios, { type AxiosError } from "axios"
import dayjs from "dayjs"
import store from "@/store"
import { HttpStatus } from "@/constant"
import { logout } from "@/store/auth-slice"
import type { GeneralErrorResponse } from "@/types/web/response"
const webClient = axios.create({
baseURL: import.meta.env.VITE_API_BASE_URL,
timeout: dayjs.duration({ seconds: 10 }).asMilliseconds(),
withCredentials: true,
withXSRFToken: true
})
webClient.interceptors.request.use(
(config) => {
const state = store.getState()
if (state.auth.isAuthenticated) {
config.headers["Authorization"] = `Bearer ${state.auth.token!}`
}
return config
},
(error: unknown) => {
console.log(error)
return Promise.reject(new Error("请求错误,请稍后再试"))
}
)
webClient.interceptors.response.use(
(response) => {
return response
},
(error: unknown) => {
const err = error as AxiosError<GeneralErrorResponse>
if (err.response?.status == HttpStatus.UNAUTHORIZED) {
store.dispatch(logout())
}
return Promise.reject(error as AxiosError)
}
)
export default webClient