vue3.0axios封装,vue3引入axios

  vue3.0axios封装,vue3引入axios

  本文主要介绍了axios的软件包以及vue3实用教程中环境变量的相关信息。通过示例代码非常详细,对你的学习或者工作有一定的参考价值。有需要的朋友可以参考一下。

  

目录

   axios基本使用配置包请求添加加载环境变量摘要

  

axios

  Axios: ajax i/o系统。可以在浏览器和节点环境中发出网络请求的第三方库。

  功能特性:

  在浏览器中发送XMLHttpRequests请求,在node.js中发送http请求,支持Promise API拦截请求和响应,转换请求和响应数据等等。

  

基本使用

  获取请求

  //导入的axios是实例对象。

  从“axios”导入axios

  //axios方法返回promise。

  const RES=await axios . get( https://http bin . org/get ,{

  //传递查询参数

  参数:{

  名字:“克劳斯”

  }

  })

  //服务器实际返回的数据放在data属性中

  console.log(res.data)

  发布请求

  const RES=await axios . post( https://http bin . org/post ,{

  数据:{

  名字:“克劳斯”

  }

  })

  请求请求

  //axios的所有请求本质上都是调用Axios的request方法。

  const res=await axios.request({

  网址: https://httpbin.org/post ,

  方法: post ,

  数据:{

  名字:“克劳斯”

  }

  })

  全部

  Axios.all本质上是Promise.all

  const res=await axios.all([

  axios . get( https://http bin . org/get ,{

  参数:{

  名字:“克劳斯”

  }

  }),

  axios . post( https://http bin . org/post ,{

  数据:{

  名字:“克劳斯”

  }

  })

  ])

  interseptor

  //拦截器必须在请求和响应之前注册。

  //请求拦截器use方法的两个参数——分别对应resolve和reject。

  resolve方法的参数是请求的配置选项。

  reject方法的参数是错误的对象。

  axios.interceptors.request.use(

  配置={

  console.log(配置)

  返回配置

  },

  err=console.error(err)

  )

  //响应拦截器use方法的两个参数——分别对应于resolve和reject

  resolve方法的参数是响应体

  reject方法的参数是错误的对象。

  axios . interceptors . response . use(

  res={

  返回结果数据

  },

  err=console.error(err)

  )

  

配置

  //以下都是全局配置

  Axios的所有全局配置都可以在属性defaults下设置。

  //基本请求公共路径

  axios . defaults . base URL= http://http bin . org

  //超时时间

  axios.defaults.timeout=10000

  //需要传递的自定义请求标头

  axios.defaults.headers={}

  //本地配置

  爱可信。get(/get ,{

  参数:{

  名字:“克劳斯”,

  年龄:18岁

  },

  //本地配置可以覆盖全局配置

  超时:5000,

  邮件头:{}

  })。然后((res)={

  console.log(res.data)

  })

  

封装

  如果把axios直接引入到每一个需要发出网络请求的页面中,会导致以下问题:

  每个页面都需要介绍axios,导致axios和逻辑耦合太强。如果以后需要修改,需要在每一个使用axios的页面中修改。

  非常麻烦而且容易出错。

  在页面请求的时候,我们会传递很多公共的配置,比如BASE_URL,TOKEN等。

  因此,我们需要重新封装我们的网络请求,它通常放在src下的service或api文件夹中。

  type.ts

  从“axios”导入{ AxiosRequestConfig,AxiosResponse }

  //自定义您自己的拦截器类型

  导出接口拦截器{

  requestInterceptor?(config:AxiosRequestConfig)=AxiosRequestConfig PromiseAxiosRequestConfig,

  requestInterceptorCatch?(err: any)=any,

  responseInterceptor?(RES:axios response)=axios response PromiseAxiosResponse,

  responseInterceptorCatch?(err: any)=any,

  }

  //通过接口继承扩展Axios的axiosRequestConfig类型

  导出接口配置扩展AxiosRequestConfig{

  截击机?拦截器

  }

  环境ts

  //在引入使用之前,将一些相关的配置配置为常量。

  //将配置和调用解耦,如果需要修改,直接修改常量的值。

  导出常量超时=10000

  导出const BASE _ URL= https://http bin。org/

  index.ts

  从导入Api ./api

  导入{

  BASE_URL,

  超时时间

  }来自 env/env

  常量api=新Api({

  baseURL: BASE_URL,

  超时:超时,

  //不同的实例可能有不同的拦截器

  //所以我们将拦截器封装成一个扩展属性进行传入

  //拦截器:{

  //requestInterceptor: config={

  //console.log(请求成功)

  //返回配置

  //},

  //requestInterceptorCatch:err=console。错误(err),

  //响应拦截器:RES=RES . data,

  //responseiinterceptorcatch:err=console。错误(err)

  //}

  })

  导出默认美国石油学会(American Petroleum Institute)

  api.ts

  从" axios "导入爱可信

  从“元素加”导入{ ElLoading }

  从" axios "导入类型{ AxiosInstance,AxiosRequestConfig }

  从""导入类型{配置} ./type

  //导出的属性和方法比较多所以使用类来进行封装

  //因为类具有比较好的封装性

  导出默认类别{

  实例:AxiosInstance

  构造函数(配置:配置){

  //每次创建实例的时候,都调用axios.create方法

  //axios.create可以返回一个爱可信实例

  //这样保证我们可以使用不同的配置创建多个爱可信实例

  这个。instance=axios。创建(配置)

  //如果存在实例级别的拦截器就使用拦截器

  //这是针对于每一个请求特有的拦截器-实例拦截

  //这里的操作也可以通过转换请求和转换响应配置项来进行实现

  if (config.interceptor) {

  常数{拦截器}=配置

  这个。实例。截击机。请求。使用(拦截器。请求拦截器,拦截器。请求拦截器捕捉)

  这个。实例。截击机。回应。使用(拦截器。回应拦截器拦截器。响应拦截器

  }

  this.registerGlobalInterceptor(配置)

  }

  //这是所有实例共有的拦截器-全局拦截

  //如果存在多个拦截器,那么多个拦截器都会被执行

  registerGlobalInterceptor(选项:配置){

  这个。实例。截击机。请求。use(config=config,err=err)

  这个。实例。截击机。回应。use(RES=RES . data,err=err)

  }

  请求(配置:AxiosRequestConfig) {

  返回这个. instance.request(配置)

  }

  }

  

请求时添加loading

  从" axios "导入爱可信

  从“元素加”导入{ ElLoading }

  从" axios "导入类型{ AxiosInstance,AxiosRequestConfig }

  从" element-plus/es/components/loading/src/loading "导入类型{ LoadingInstance }

  从""导入类型{配置} ./type

  //El-加载是插件不是组件,元素加的按需引入并不能正确的引入埃尔加载的样式

  //所以需要自己手动进行引入埃尔加载的样式

  导入元素加/主题粉笔/El加载。 CSS

  导出默认类别{

  实例:AxiosInstance

  加载:加载实例未定义

  构造函数(配置:配置){

  这个。instance=axios。创建(配置)

  if (config.interceptor) {

  常数{拦截器}=配置

  这个。实例。截击机。请求。使用(拦截器。请求拦截器,拦截器。请求拦截器捕捉)

  这个。实例。截击机。回应。使用(拦截器。回应拦截器拦截器。响应拦截器

  }

  this.registerGlobalInterceptor()

  }

  registerGlobalInterceptor() {

  这个。实例。截击机。请求。使用((Config:Config)={

  //?-当左侧的操作数为空或者不明确的时,返回右侧操作数,否则返回左侧操作数

  如果(配置?showLoading?真){

  //开启装货

  这个。加载=e加载。服务({

  锁:真的,

  文本:"正在加载.",

  背景: rgba(0,0,0,0.7),

  })

  }

  返回配置

  },err=err)

  这个。实例。截击机。回应。使用(RES={

  //关闭装货

  这个,装货?关闭()

  //axios返回的是字符串,所以需要反序列化

  返回JSON.parse(res.data)

  },错误={

  这个,装货?关闭()

  返回错误

  })

  }

  请求(配置:AxiosRequestConfig) {

  返回this.instance.request(配置)

  }

  }

  

环境变量

  在开发中,有时我们需要根据不同的环境设置不同的环境变量。有四种常见的环境:

  开发环境:开发生产环境:生产测试环境:测试预发布环境:阶段配置模式1:手动切换不同环境(不推荐)

  //开发环境

  //const BASE _ URL= http://example . org/dev

  //const BASE_NAME=Klaus

  //生产环境

  //const BASE _ URL= http://example . org/prod

  //const BASE_NAME=Alex

  //测试环境

  //const BASE _ URL= http://example . org/test

  //const BASE_NAME=Steven

  配置模式2-根据process.env.NODE_ENV的值进行区分

  //vite默认会设置自己的环境变量。

  //比如MODE,PROD,DEV,SSR,BASE_URL等。

  if(import . meta . env . mode=== development ){

  //.做某事

  }否则{

  //.做别的

  }

  配置模式3-编写不同的环境变量配置文件。

  # .env.production

  #注意:vite中的所有环境变量都必须以VITE_开头

  生产中的我的应用程序

  # .env.development

  我的应用程序正在开发中

  vite打包时会根据开发环境自动注入不同的环境变量。我们可以读取这些环境变量,用在需要的地方,比如vite配置文件,src源代码等等。

  //使用

  console . log(import . meta . env . vite _ APP _ TITLE)

  

总结

  这就是这篇关于vue3实用教程的封装和环境变量的文章。有关VUE 3 axios的封装和环境变量的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: