mirror of
https://github.com/Awuqing/BackupX.git
synced 2026-06-08 03:09:34 +08:00
first commit
This commit is contained in:
48
web/src/services/http.ts
Normal file
48
web/src/services/http.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
import axios from 'axios'
|
||||
|
||||
export interface ApiEnvelope<T> {
|
||||
code: string | number
|
||||
message: string
|
||||
data: T
|
||||
}
|
||||
|
||||
let accessToken = ''
|
||||
let unauthorizedHandler: (() => void) | null = null
|
||||
|
||||
export const http = axios.create({
|
||||
baseURL: '/api',
|
||||
timeout: 10000,
|
||||
})
|
||||
|
||||
export function setAccessToken(token: string) {
|
||||
accessToken = token
|
||||
}
|
||||
|
||||
export function getAccessToken() {
|
||||
return accessToken
|
||||
}
|
||||
|
||||
export function setUnauthorizedHandler(handler: (() => void) | null) {
|
||||
unauthorizedHandler = handler
|
||||
}
|
||||
|
||||
export function unwrapApiEnvelope<T>(response: ApiEnvelope<T>) {
|
||||
return response.data
|
||||
}
|
||||
|
||||
http.interceptors.request.use((config) => {
|
||||
if (accessToken) {
|
||||
config.headers.Authorization = `Bearer ${accessToken}`
|
||||
}
|
||||
return config
|
||||
})
|
||||
|
||||
http.interceptors.response.use(
|
||||
(response) => response,
|
||||
(error) => {
|
||||
if (error.response?.status === 401 && unauthorizedHandler) {
|
||||
unauthorizedHandler()
|
||||
}
|
||||
return Promise.reject(error)
|
||||
},
|
||||
)
|
||||
Reference in New Issue
Block a user