小工具知识网

当前位置: 首页 > 行业知识 > Vue3+Vite+Axios Request 请求封装(TS版本)最新

行业知识

Vue3+Vite+Axios Request 请求封装(TS版本)最新

2026-11-07 12:51:26 来源:互联网转载

Vue3+Vite+Axios Request 请求封装(TS版本)

http > index.ts 请求封装

/* * @Date: 2024-03-30 12:37:05 * @LastEditors: zhong * @LastEditTime: 2024-03-30 14:12:52 * @FilePath: \app-admin\src\http\index.ts */import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse, InternalAxiosRequestConfig } from "axios";import { ElMessage } from "element-plus";// axios 请求配置const config = {    // baseURL:'http://localhost:8080',    baseURL: '/api',    timeout: 1000}// 定义返回值类型export interface Result {    code: number;    msg: string;    data: T;}class Http {    // axios 实例    private instance: AxiosInstance;    // 构造函数初始化    constructor(config: AxiosRequestConfig) {        this.instance = axios.create(config);        //定义拦截器        this.interceptors();    }    private interceptors() {        // axios 发送请求之前的处理        this.instance.interceptors.request.use((config: InternalAxiosRequestConfig) => {            // 在请求头部携带token            // let token = sessionStorage.getItem('token');            let token = '';            if (token) {                config.headers!['token'] = token;                // 把 token 放到 headers 里面                // (config.headers as AxiosRequestHeaders).token = token;            }            console.log(config);            return config;        }, (error: any) => {            error.data = {};            error.data.msg = '服务器异常,请联系管理员!'            return error;        })        // axios 请求返回之后的处理        // 请求返回处理        this.instance.interceptors.response.use((res: AxiosResponse) => {            // console.log(res.data);            if (res.data.code != 200) {                ElMessage.error(res.data.msg || '服务器出错啦');                return Promise.reject(res.data.msg || '服务器出错啦');            } else {                return res.data;            }        }, (error) => {            console.log('进入错误!');            error.data = {};            if (error && error.response) {                switch (error.response.status) {                    case 400:                        error.data.msg = "错误请求";                        ElMessage.error(error.data.msg);                        break;                    case 401:                        error.data.msg = "未授权,请登录";                        ElMessage.error(error.data.msg);                        break;                    case 403:                        error.data.msg = "拒绝访问";                        ElMessage.error(error.data.msg);                        break;                    case 404:                        error.data.msg = "请求错误,未找到该资源";                        ElMessage.error(error.data.msg);                        break;                    case 405:                        error.data.msg = "请求方法未允许";                        ElMessage.error(error.data.msg);                        break;                    case 408:                        error.data.msg = "请求超时";                        ElMessage.error(error.data.msg);                        break;                    case 500:                        error.data.msg = "服务器端出错";                        ElMessage.error(error.data.msg);                        break;                    case 501:                        error.data.msg = "网络未实现";                        ElMessage.error(error.data.msg);                        break;                    case 502:                        error.data.msg = "网络错误";                        ElMessage.error(error.data.msg);                        break;                    case 503:                        error.data.msg = "服务不可用";                        ElMessage.error(error.data.msg);                        break;                    case 504:                        error.data.msg = "网络超时";                        ElMessage.error(error.data.msg);                        break;                    case 505:                        error.data.msg = "http版本不支持该请求";                        ElMessage.error(error.data.msg);                        break;                    default:                        error.data.msg = `连接错误${error.response.status}`;                        ElMessage.error(error.data.msg);                }            } else {                error.data.msg = "连接到服务器失败";                ElMessage.error(error.data.msg)            }            return Promise.reject(error);        })    }    // GET方法    get(url: string, params?: object): Promise {        return this.instance.get(url, { params });    }    // POST方法    post(url: string, data?: object): Promise {        return this.instance.post(url, data);    }    // PUT方法    put(url: string, data?: object): Promise {        return this.instance.put(url, data );    }    // DELETE方法    delete(url: string): Promise {        return this.instance.delete(url);    }}export default new Http(config);

vite.config.ts 配置跨域

/* * @Date: 2024-03-24 15:19:01 * @LastEditors: zhong * @LastEditTime: 2024-03-30 13:48:06 * @FilePath: \app-admin\vite.config.ts */import { defineConfig } from 'vite'import vue from '@vitejs/plugin-vue'import { resolve } from 'path'// https://vitejs.dev/config/export default defineConfig({  plugins: [vue()],server:{    host: "0.0.0.0",   // 解决控制台: NextWork:use --host to expose    port: 8080,    hmr: true,  // 开启热更新    open: true,  // 启动在浏览器打开    proxy: {      '/api': {        target: 'http://localhost:9999',        // target就是你要访问的目标地址,可以是基础地址,这样方便在这个网站的其他api口调用数据        changeOrigin: true,        rewrite: (path) => path.replace(/^\/api/, ''),        // 要记得加rewrite这句      },    },  },  resolve: {    alias: [      {        find: '@',        replacement: resolve(__dirname, 'src')      }    ]  }})

user > UserModel.ts 用户数据模型

/* * @Date: 2024-03-30 13:16:03 * @LastEditors: zhong * @LastEditTime: 2024-03-30 13:19:17 * @FilePath: \app-admin\src\api\user\userModel.ts */// 定义用户的数据类型export type User = {    userId?: string,    username: string,    password: string,    nickName: string,    phone: string,    sex: string,    status: string,}

user > index.ts 请求函数

/* * @Date: 2024-03-30 13:15:25 * @LastEditors: zhong * @LastEditTime: 2024-03-30 13:58:40 * @FilePath: \app-admin\src\api\user\index.ts */import http from "@/http";import { User } from "./userModel";// 新增export const addAdminUserApi = (parm: User) => {    console.log(parm);    return http.post("/api/sysUser", parm)}

AdminUser.vue 使用请求函数

                                                                                        搜索                重置                新增                                                                                                                                                                                                                        男                            女                                                                                                                                                                                                                                                                                                                    启用                            停用                                                                                    import { reactive, ref } from 'vue';import SystemDialog from '@/components/SystemDialog/SystemDialog.vue';import useDialog from '@/hooks/useDialog';import { ElMessage, FormInstance } from 'element-plus';import { addAdminUserApi } from '@/api/user'// 获取弹框属性const { dialog, onClose } = useDialog();// 搜索绑定对对象const searchParm = reactive({    nickName: ""})// 表单 ref 属性const addRef = ref()// 新增按钮const addBtn = () => {    dialog.height = 320;    dialog.visible = true;}// 新增表单内容const addAdminParm = reactive({    userId: "",    username: "",    password: "",    nickName: "",    phone: "",    sex: "",    status: ""})// 表单验证规则const rules = {    nickName: [        { required: true, message: '请填写您的昵称', trigger: 'blur' },        { min: 0, max: 12, message: 'Length should be 0 to 12', trigger: 'blur' },    ],    sex: [{ required: true, message: '请选择您的性别', trigger: 'blur' }],    phone: [{ required: true, message: '请输入手机号', trigger: 'blur' }],    userName: [{ required: true, message: '请输入账号', trigger: 'blur' }],    userPassword: [{ required: true, message: '请输入密码', trigger: 'blur' }],    status: [{ required: true, message: '请选择账号状态', trigger: 'blur' }],}// 提交表单const commit = () => {    addRef.value?.validate(async (valid) => {        if (valid) {            // 提交数据            const res = await addAdminUserApi(addAdminParm);            if (res && res.code == 200) {                // 信息提示                ElMessage.success(res.msg);                // 提交成功 关闭弹框                dialog.visible = false;            }        }    });}

上一篇:C++ 基础专题容器(list)

下一篇:织梦英文栏目调取全攻略,轻松展示内容,打造吸睛标题!