MCPcopy Create free account
hub / github.com/chunshand/qdev / createService

Function createService

admin/src/utils/service.ts:9–107  ·  view source on GitHub ↗

创建请求实例

()

Source from the content-addressed store, hash-verified

7
8/** 创建请求实例 */
9function createService() {
10 // 创建一个 axios 实例命名为 service
11 const service = axios.create()
12 // 请求拦截
13 service.interceptors.request.use(
14 (config) => config,
15 // 发送失败
16 (error) => Promise.reject(error)
17 )
18 // 响应拦截(可根据具体业务作出相应的调整)
19 service.interceptors.response.use(
20 (response) => {
21 // apiData 是 api 返回的数据
22 const apiData = response.data
23 // 二进制数据则直接返回
24 const responseType = response.request?.responseType
25 if (responseType === "blob" || responseType === "arraybuffer") return apiData
26 // 这个 code 是和后端约定的业务 code
27 const code = apiData.code
28 // 如果没有 code, 代表这不是项目后端开发的 api
29 if (code === undefined) {
30 // ElMessage.error("非本系统的接口")
31 // return Promise.reject(new Error("非本系统的接口"))
32 return apiData
33
34 }
35 switch (code) {
36 case 200:
37 // 本系统采用 code === 0 来表示没有业务错误
38 return apiData
39 default:
40 // 不是正确的 code
41 ElMessage.error(apiData.message || "Error")
42 return Promise.reject(new Error("Error"))
43 }
44 },
45 async (error) => {
46 const { refreshToken, logout } = useUserStoreHook()
47 // status 是 HTTP 状态码
48 const status = get(error, "response.status")
49 const message = get(error, "response.data.message")
50 switch (status) {
51 case 400:
52 error.message = message ?? "请求错误"
53 break
54 case 401:
55 error.message = message
56 if (error.config.url != '/login/refresh') {
57 const res = await refreshToken();
58 if (res.success) {
59 setTimeout(() => {
60 let config = error.config;
61 config.headers.Authorization = res.data.access_token;
62 Promise.resolve(service(error.config));
63 }, 30);
64 } else {
65 Promise.reject(res)
66 }

Callers 1

service.tsFile · 0.85

Calls 4

useUserStoreHookFunction · 0.90
refreshTokenFunction · 0.85
logoutFunction · 0.85
createMethod · 0.45

Tested by

no test coverage detected