From dfff053ae8388797ce10d268ee75a8e223d8dfbb Mon Sep 17 00:00:00 2001
From: pany <939630029@qq.com>
Date: Tue, 6 Jun 2023 18:15:29 +0800
Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96=20?=
 =?UTF-8?q?utils/service?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/utils/service.ts | 50 +++++++++++++++++++++++---------------------
 1 file changed, 26 insertions(+), 24 deletions(-)

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 <T>(config: AxiosRequestConfig): Promise<T> {
-    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)