灏天阁

vue3.2/Vite/Ts37: 真实接口替换 mock 接口

· Yin灏

处理代理跨域

// vite.config.ts
// 获取对应环境下的变量
import { defineConfig, loadEnv } from "vite";
//...
export default defineConfig(({ command, mode }) => {
  // 获取对应环境配置文件里的对象,如 .env.development、.env.production、.env.test
  let env = loadEnv(mode, process.cwd());
  //...
  server: {
    proxy: {
         [env.VITE_APP_BASE_API]: {
            // 获取数据的服务器地址
            target: env.VITE_SERVE,
            changeOrigin: true,
            // 路径重写
            rewrite: path => path.replace(/^\/api/, '')
         }
    }
  }
  //...
});

替换 mock 接口和 Ts 类型

|-- src
    |-- api
        |-- user
            |-- index.ts
            |-- type.ts
// src/api/user/index.ts
import request from "@/utils/request";
//...
import type { loginFormData, loginResponseData, userInfoResponseData } from "./type";
//...
enum API {
  LOGIN_URL = "/admin/acl/index/login",
  USERINFO_URL = "/admin/acl/index/info",
  LOGOUT_URL = "/admin/acl/index/logout",
}
// 登录接口
export const reqLogin = (data: loginFormData) =>
  request.post<any, loginResponseData>(API.LOGIN_URL, data);
// 获取用户信息接口
export const reqUserInfo = () => request.get<any, userInfoResponseData>(API.USERINFO_URL);
// 退出登录接口
// <any, any> 泛型的第二个参数表示服务器返回的数据类型
export const reqLogout = () => request.post<any, any>(API.LOGOUT_URL);
// src/api/user/type.ts
// 定义用户接口相关 ts 类型
export interface loginFormData {
  username: string;
  password: string;
}

// 接口继承
export interface ResponseData {
    code: number,
    message: string,
    ok: booleam
}
export interface loginResponseData extends ResponseData {
    data: string,
}
export interface userInfoResponseData extends ResponseData {
    data: {
        routes: string[],
        buttons: string[],
        roles: string[],
        name: string,
        avatar: string
    },
}

- Book Lists -