diff --git a/src/utils/service.ts b/src/utils/service.ts index bd76b24..bc7baa0 100644 --- a/src/utils/service.ts +++ b/src/utils/service.ts @@ -1,12 +1,12 @@ import axios, { type AxiosInstance, type AxiosRequestConfig } from "axios" import { useUserStoreHook } from "@/store/modules/user" import { ElMessage } from "element-plus" -import { get } from "lodash-es" +import { get, merge } from "lodash-es" import { getToken } from "./cache/cookies" /** 创建请求实例 */ function createService() { - // 创建一个 Axios 实例 + // 创建一个 axios 实例命名为 service const service = axios.create() // 请求拦截 service.interceptors.request.use( @@ -17,28 +17,27 @@ function createService() { // 响应拦截(可根据具体业务作出相应的调整) service.interceptors.response.use( (response) => { - // apiData 是 API 返回的数据 - const apiData = response.data as any - // 这个 Code 是和后端约定的业务 Code + // apiData 是 api 返回的数据 + const apiData = response.data + // 这个 code 是和后端约定的业务 code const code = apiData.code - // 如果没有 Code, 代表这不是项目后端开发的 API + // 如果没有 code, 代表这不是项目后端开发的 api if (code === undefined) { ElMessage.error("非本系统的接口") return Promise.reject(new Error("非本系统的接口")) - } else { - switch (code) { - case 0: - // code === 0 代表没有错误 - return apiData - default: - // 不是正确的 Code - ElMessage.error(apiData.message || "Error") - return Promise.reject(new Error("Error")) - } + } + switch (code) { + case 0: + // 本系统采用 code === 0 来表示没有业务错误 + return apiData + default: + // 不是正确的 code + ElMessage.error(apiData.message || "Error") + return Promise.reject(new Error("Error")) } }, (error) => { - // Status 是 HTTP 状态码 + // status 是 HTTP 状态码 const status = get(error, "response.status") switch (status) { case 400: @@ -87,23 +86,26 @@ function createService() { } /** 创建请求方法 */ -function createRequestFunction(service: AxiosInstance) { +function createRequest(service: AxiosInstance) { return function (config: AxiosRequestConfig): Promise { - const configDefault = { + const token = getToken() + const defaultConfig = { headers: { // 携带 Token - Authorization: "Bearer " + getToken(), - "Content-Type": get(config, "headers.Content-Type", "application/json") + Authorization: token ? `Bearer ${token}` : undefined, + "Content-Type": "application/json" }, timeout: 5000, baseURL: import.meta.env.VITE_BASE_API, data: {} } - return service(Object.assign(configDefault, config)) + // 将默认配置 defaultConfig 和传入的自定义配置 config 进行合并成为 mergeConfig + const mergeConfig = merge(defaultConfig, config) + return service(mergeConfig) } } /** 用于网络请求的实例 */ -export const service = createService() +const service = createService() /** 用于网络请求的方法 */ -export const request = createRequestFunction(service) +export const request = createRequest(service)