vue前端基于axios请求封装
api.js封装:所有接口都封装到这里面
api.js
request.js
handle.js
main.js
index.js

//所有请求接口地址 const url = 'http://element.thexxdd.cn/api/' const urls= class{ static m(){ //注册接口 const register = `${url}register` //登录接口 const login = `${url}login` return { register, login } } } export default urls
request封装:封装get和post请求

import instance from "./header"; const request = class{ constructor(url,arg){ this.url = url this.arg = arg } //post请求 modePost(){ return new Promise((resolve,reject)=>{ instance.post((this.url),this.arg) .then(res=>{ resolve(res) }) .catch(err=>{ reject(err) }) }) } //get请求 modeGet(){ return new Promise((resolve,reject)=>{ instance.get((this.url)) .then(res=>{ resolve(res) }) .catch(err=>{ reject(err) }) }) } } export default request
handle.js:封装请求拦截器和token加密

import axios from "axios"; //加密token import { Base64 } from "js-base64"; //消息弹出框 import { ElMessageBox } from "element-plus"; //创建axios 通用配置 let instance = axios.create({ responseType:'json', headers:{'Contene-Type':"application/json"} }) //对token加密 function baseFun(){ const token = localStorage.getItem('token') const base64= Base64.encode(token + ':') return 'Basic ' + base64 } //http拦截器:请求发出之前给每个接口携带token去后端校验身份 instance.interceptors.request.use( config=>{ let token = localStorage.getItem('token') if(token){ config.headers.Authorization = baseFun() } return config },err =>{ return Promise.reject(err) } ) //http拦截器:请求发出之后 instance.interceptors.response.use( response=>{ return response },error =>{ if(error.response){ let ERRS =error.response.status let MSG = error.response.data.msg.msg let errData = ERRS == 401 ? MSG :'服务器发生错误' switch(ERRS){ case 401 : ElMessageBox.alert(errData,"提示",{ confirmButtonText:"好的", type:'error' }) .then(res=>{ //跳转到登录界面 }) .catch(err=>{ }) break } } //返回接口的错误信息 return Promise.reject(error.response.data) } ) export default instance
main.js中引用与挂载

/请求地址和方法 import urls from '../api/api' import request from '../api/request' //vue3 全局挂载 app.config.globalProperties.$urls = urls app.config.globalProperties.$request = request //vue2全局挂载 Vue.prototype.$request= request Vue.prototype.$urls= urls
页面中调用

//vue2调用 let result = await new this.$request( this.$urls.m().getLogin, this.from ).modePost() //vue3调用全局组件需要用到组合式api getCurrentInstance import { getCurrentInstance } from "vue"; //引入getCurrentInstance const { proxy } = getCurrentInstance();//创建实例 //调用 const result = await new proxy.$request( proxy.$urls.m().login, obj ).modePost();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App