当前位置: 首页 > news >正文

axios

文章目录

  • Axios使用步骤
    • 1、安装
    • 2、创建axios实例并配置
    • 3、添加请求和响应拦截器
    • 4、定义一些常用的请求方法
    • 5、在其他文件中使用封装的axios实例和方法
  • 封装axios
  • vue2和vue3使用axios的区别
    • 全局挂载
      • vue2
      • vue3
    • 全局使用
      • vue2
      • vue3

Axios使用步骤

1、安装

npminstallaxios# 或者yarnaddaxios

2、创建axios实例并配置

创建一个文件,例如axiosInstance.js,然后设置基本的axios实例和配置。

importaxiosfrom'axios';// 创建axios实例constinstance=axios.create({baseURL:'https://api.example.com',// 你的基础URLtimeout:10000,// 请求超时时间headers:{'Content-Type':'application/json','Authorization':`Bearer YOUR_ACCESS_TOKEN`// 如果需要的话}});exportdefaultinstance;

3、添加请求和响应拦截器

在axiosInstance.js配置拦截器

// 添加请求拦截器instance.interceptors.request.use(config=>{// 在发送请求之前做些什么,例如设置token、添加通用头部等returnconfig;},error=>{// 对请求错误做些什么returnPromise.reject(error);});// 添加响应拦截器instance.interceptors.response.use(response=>{// 对响应数据做点什么returnresponse.data;// 或者根据需要返回其他内容,例如response.data.data等},error=>{// 对响应错误做点什么returnPromise.reject(error);});

4、定义一些常用的请求方法

可以在axiosInstance.js中定义一些常用的请求方法

// 例如,定义一个get方法封装constget=(url,config={})=>instance.get(url,config);constpost=(url,data,config={})=>instance.post(url,data,config);constput=(url,data,config={})=>instance.put(url,data,config);constdel=(url,config={})=>instance.delete(url,config);// 注意这里是delete而不是del,JavaScript关键字不能用作变量名。export{get,post,put,del};// 导出这些方法供其他文件使用。

5、在其他文件中使用封装的axios实例和方法

import{get,post}from'./axiosInstance';// 根据你的路径调整导入路径// 使用封装的get方法发送请求get('/users').then(response=>{console.log(response);// 处理响应数据}).catch(error=>{console.error(error);// 处理错误情况});

封装axios

1、设置接口请求前缀
根据不同环境(开发、测试、生产)设置不同的请求前缀:

if(process.env.NODE_ENV==='development'){axios.defaults.baseURL='http://dev.xxx.com';}elseif(process.env.NODE_ENV==='production'){axios.defaults.baseURL='http://prod.xxx.com';}

vue.config.js配置代理转发以实现跨域:

devServer:{proxy:{'/proxyApi':{target:'http://dev.xxx.com',changeOrigin:true,pathRewrite:{'^/proxyApi':''}}}}

2、设置请求头和超时时间
创建 axios 实例时,配置通用请求头和超时时间:

constservice=axios.create({timeout:30000,headers:{'Content-Type':'application/json;charset=utf-8'}});

3、封装请求方法
封装 GET 和 POST 请求方法,便于统一管理和使用:

exportfunctionhttpGet({url,params={}}){returnnewPromise((resolve,reject)=>{axios.get(url,{params}).then(res=>resolve(res.data)).catch(err=>reject(err));});}exportfunctionhttpPost({url,data={},params={}}){returnnewPromise((resolve,reject)=>{axios({url,method:'post',data,params}).then(res=>resolve(res.data)).catch(err=>reject(err));});}

将封装的方法放在 api.js 文件中,便于统一管理:

import{httpGet,httpPost}from'./http';exportconstgetorglist=(params={})=>httpGet({url:'apps/api/org/list',params});

在页面中直接调用:

import{getorglist}from'@/assets/js/api';getorglist({id:200}).then(res=>{console.log(res);});

4、添加请求拦截器
在请求拦截器中添加通用逻辑,如设置token:

axios.interceptors.request.use(config=>{consttoken=localStorage.getItem('token');token&&(config.headers.Authorization=token);returnconfig;},error=>Promise.reject(error));

5、添加响应拦截器
在响应拦截器中处理通用错误和业务逻辑:

axios.interceptors.response.use(response=>{if(response.status===200){// 根据状态码处理业务逻辑returnPromise.resolve(response.data);}else{returnPromise.reject(response);}},error=>{// 处理错误returnPromise.reject(error);});

vue2和vue3使用axios的区别

全局挂载

  • vue2:使用Vue.prototype,写法:Vue.prototype.$http = axios
  • vue3:配置globalProperties,写法:app.config.globalProperties.$http = Axios

vue2

使用Vue.prototype

importaxiosfrom'axios'// 配置请求的跟路径axios.defaults.baseURL='http://127.0.0.1'Vue.prototype.$http=axios//使用:在各个组件或页面中 使用 this.$http请求接口

vue3

vue3中取消了Vue.prototype,因此需配置globalProperties挂载全局方法对象

constapp=createApp(App)/* 挂载全局对象 start */app.config.globalProperties.$http=Axios/* 挂载全局对象 end */app.use(router).use(store);app.mount('#app')

全局使用

  • vue2
  • vue3

vue2

使用this.$http

this.$http({url:'/api/v1/posts/list'}).then(res=>{//获取数据})

vue3

  • 方法一:通过getCurrentInstance方法获取当前实例,再根据当前实例找到全局实例对象appContext,进而拿到全局实例的config.globalProperties
  • 方法二:通过getCurrentInstance方法获取上下文,这里的proxy就相当于this。其中有很多全局对象,如:route、route、route、 router 、store。如果全局使用了ElementUI后,还可以拿到store。如果全局使用了ElementUI后,还可以拿到store。如果全局使用了ElementUI后,还可以拿到message、$dialog等等
<template><divclass="box"></div></template><script>import{ref,reactive,getCurrentInstance}from'vue'exportdefault{setup(props,cxt){// 方法一constcurrentInstance=getCurrentInstance()const{$http,$message,$route}=currentInstance.appContext.config.globalPropertiesfunctiongetList(){$http({url:'/api/v1/posts/list'}).then(res=>{let{data}=res.data console.log(data)})}// 方法二const{proxy}=getCurrentInstance()functiongetData(){proxy.$http({url:'/api/v1/posts/list'}).then(res=>{let{data}=res.data console.log(data)})}}}</script>
http://www.jsqmd.com/news/477313/

相关文章:

  • AI误删生产库预警|中科热备:以硬核技术筑牢云上容灾防线
  • 时钟同步设置,诊断方法
  • Iliad Runtime 绘制
  • 你的选题值得一篇好综述——百考通助你站在学术前沿,自信开题 ��
  • 2026企业用工数字化:劳动力管理系统选型与 TOP10 高性价比推荐
  • 2026年钢结构加工专业厂家排行榜,哪家排名靠前? - mypinpai
  • 2026年3月亲测:金华AI搜索优化企业
  • Linux 调度:通往延迟抢占的漫漫长路
  • 计算机毕业设计源码:Python家庭亲子在线购物平台 Django框架 可视化 Vue 购物 采购 电商 商品 大数据 数据分析 大模型 deepseek agent(建议收藏)✅
  • 动态IP池是什么?定义、作用与IP来源解析
  • 第一章笔记(重发)
  • 着色器编程:我试图用GPU画一个完美圆形,结果得到了像素化的“洋葱圈”
  • LangChain:定义智能体时代新框架
  • 2026年正规线上幼犬训犬排行榜单出炉,谁能跻身TOP行列?
  • 学习笔记:Linux 创建新用户并安装Miniconda
  • 电力电子,buck型DC-DC变换器电路, 双闭环控制,开环闭环对比仿真 输入24v输出12v...
  • ​影视飓风Tim探展德施曼AWE展台,联合B站现场解锁AI智能锁新玩法
  • ESP32光传感器监测项目
  • 别再被参数带偏了!哪个品牌的护眼灯最好?从真实使用体验出发,深度对比书客、明基、柏曼、霍尼韦尔等12款热门护眼台灯,一次讲清选灯的核心逻辑
  • 2026年主流降论文AI率工具实测:哪款效果最好?
  • 别被割韭菜!过来人揭秘:赛一证书对零基础AI求职的真实价值
  • 类加载子系统
  • ISTA 3E 和 3B 的区别
  • OpenClaw 3.12 重磅更新:全新 Dashboard、移动端适配与安全增强
  • 教资笔记资源合集
  • 快速搭建Django投票应用
  • 封神!技术面试答“线上紧急故障”,用《孙子兵法》拿捏面试官[特殊字符]
  • 程序员为什么不自己开发应用赚钱
  • 新手教师管班:别让你的善良没有锋芒
  • Laravel 9.x 核心特性全解析