vue封装axios全局使用,vue集成axios

  vue封装axios全局使用,vue集成axios

  本文主要介绍在vue中封装axios,实现api接口统一管理的方法,帮助大家更好的理解和使用vue。感兴趣的朋友可以了解一下。

  在vue项目中,我们通常使用axios与后台进行交互。axios有很多有用的功能,这里就不介绍了。详情请参考axios中文网。在封装axios之前,我们需要使用vue搭建工具创建一个vue项目(这里我使用的是cli4)。

  

安装

  cnpm安装axios -保存-开发;//安装axios

  cnpm安装QS-save-dev;//安装qs模块,用来序列化post类型的数据,否则后端无法接收数据。

  

模块引入

  在src目录下创建一个服务目录,存储接口封装的相关文件。然后在service目录下创建service.js用于axios和qs模块的介绍,并将axios封装在这个文件中。代码如下(只有一个接口域名时):

  从“axios”导入axios/导入axios

  引入从“QS”//QS的导入来序列化post类型的数据,否则后端无法接收数据。

  //设置post请求头

  axios . defaults . headers . post[ Content-Type ]= application/x-www-form-urlencoded;charset=UTF-8 ;

  axios . defaults . with credentials=false;//跨域请求时,不会携带用户凭据;Cookie在返回的响应中也会被忽略。

  //创建一个请求超时为300秒的axios实例。

  const instance=axios.create({

  超时:300000,

  });

  //请求和响应拦截可以根据实际项目需求编写

  //在请求发起前拦截

  instance . interceptors . request . use((config)={

  //这里可以操作接口请求头,比如:config . headers[ x-token ]=token。

  Console.log(请求拦截,config);

  返回配置;

  },(错误)={

  //对请求错误做些什么

  退货承诺.拒绝(错误)

  })

  //响应拦截(请求返回后拦截)

  instance . interceptors . response . use(response={

  Console.log(响应拦截,响应);

  返回响应;

  },错误={

  console.log(catch ,错误)

  退货承诺.拒绝(错误)

  })

  //根据请求类型封装axios

  const api={

  获取(url,数据){

  返回instance.get(url,{params:data})

  },

  帖子(url,数据){

  返回instance.post(url,qs.stringify(data))

  },

  }

  导出{api}

  上面的代码是只有一个接口域名的情况(大多数情况)。当有多个接口域名时(少数情况),我们需要对之前的包进行改造。代码如下:

  从“axios”导入axios/导入axios

  引入从“QS”//QS的导入来序列化post类型的数据,否则后端无法接收数据。

  //设置post请求头

  axios . defaults . headers . post[ Content-Type ]= application/x-www-form-urlencoded;charset=UTF-8 ;

  axios . defaults . with credentials=false;//跨域请求时,不会携带用户凭据;Cookie在返回的响应中也会被忽略。

  //创建一个axios实例,请求超时300秒。因为项目中有多个域名,所以需要对应创建多个axios实例。

  const instanceA=axios.create({

  超时:300000,

  });

  const instanceB=axios.create({

  超时:300000,

  });

  //如果项目是单域名,这里不需要配置。当项目接口有多个域名时,需要配置axios实例的基本路径,否则无法在项目生产环境中进行不同的调用。

  if(process . ENV . node _ ENV== production ){

  instance a . defaults . base URL= https://www . production _ a . com ;

  instance b . defaults . base URL= https://www . production _ b . com ;

  }

  //请求和响应拦截可以根据实际项目需求编写

  //在请求发起前拦截

  instance a . interceptors . request . use((config)={

  //这里可以操作接口请求头,比如:config . headers[ x-token ]=token。

  Console.log(请求拦截,config);

  返回配置;

  },(错误)={

  //对请求错误做些什么

  退货承诺.拒绝(错误)

  })

  instance b . interceptors . request . use((config)={

  Console.log(请求拦截,config);

  返回配置;

  },(错误)={

  //对请求错误做些什么

  退货承诺。拒绝(错误)

  })

  //响应拦截(请求返回后拦截)

  实例a拦截器。回应。使用(response={

  console.log(响应拦截,回应);

  返回响应;

  },错误={

  console.log(catch ,错误)

  退货承诺。拒绝(错误)

  })

  实例b拦截器。回应。使用(response={

  console.log(响应拦截,回应);

  返回响应;

  },错误={

  console.log(catch ,错误)

  退货承诺。拒绝(错误)

  })

  //按照请求类型对爱可信进行封装

  const api={

  获取(网址,数据){

  返回instanceA.get(url,{params:data})

  },

  帖子(网址,数据){

  return instanceA.post(url,qs.stringify(data))

  },

  doGet(网址,数据){

  返回instanceB.get(url,{params:data})

  },

  doPost(url,数据){

  返回instanceB.post(url,qs.stringify(data))

  }

  }

  导出{api}

  上述代码中有根据生产环境对爱可信实例的基础路径进行配置,如果项目中有多个环境(如:测试环境等),则需要对CLI4脚手架环境变量进行配置

  

api接口统一管理

  将美国石油学会(美国石油协会)接口按照功能模块进行拆分,把同一模块下的接口写在同一个文件中进行统一管理,这样代码会更容易维护。比如我们的项目中有新闻模块,音乐模块等。我们就在塞尔维克目录中创建新闻网、音乐网文件,用于管理各自模块的所有美国石油学会(美国石油协会)接口,这里我只拿新闻网文件为例,代码如下:

  从""导入{api} ./服务。js’;

  常数新闻={

  getNewsList(){//获取新闻列表

  返回api.get(api/news/getNewsList )

  },

  editNewsDetail(data){//修改新闻详情

  返回API。post( API/news/editnewsdail ),数据);

  }

  }

  导出默认新闻;

  为了更方便在项目中调用这些封装好的接口,我们需要将这些接口挂载到某视频剪辑软件的原型上,首先我们要在服务目录中创建api.js文件,将所有模块的美国石油学会(美国石油协会)管理文件引入进来,然后进行统一导出,代码如下:

  //引入相关美国石油学会(美国石油协会)管理模块

  从导入新闻.新闻。js’;

  //进行统一导出

  导出默认值{

  新闻

  }

  找到项目中的主页。射流研究…文件,将接口挂载到某视频剪辑软件的原型上,代码如下:

  从“vue”导入某视频剪辑软件

  从导入应用程序 App.vue

  从导入路由器。/路由器

  从导入存储。/商店

  从" axios "导入爱可信

  Vue.prototype.axios=axios

  Vue.config.productionTip=false

  从导入api ./service/API。js’;

  //将封装的接口挂载到某视频剪辑软件原型上

  Vue.prototype. $ api=api

  新Vue({

  路由器,

  店,

  render: h=h(App)

  }).$ mount("# app ")

  然后我们在项目创建完成时自动生成的模板文件App.vue调用封装好的接口,代码如下:

  模板

  div id=应用程序

  div id=nav

  路由器链接到=/ Home/路由器链接

  路由器链接到=/about about/路由器链接

  button @click=getN 接口封装获取/按钮

  button @click=postN 接口封装海报/按钮

  /div

  路由器-视图/

  /div

  /模板

  脚本

  导出默认值{

  方法:{

  getN(){

  这个api.news.getNewsList().然后((res)={

  控制台。日志(分辨率);

  })

  },

  postN(){

  let OpenID= oo 5 TQ 5 vmppuzlqwfxhpmwjqwsanm ;

  让产品代码= pro-1337270496655446016 ;

  这个10.99美元API。新闻。编辑新闻详细信息({ OpenID,productCodes}).然后((res)={

  警报(参考数据。味精);

  })

  }

  }

  }

  /脚本

  样式lang=scss

  #app {

  字体系列:Avenir、Helvetica、阿里亚、无衬线;

  -WebKit-字体-平滑:抗锯齿;

  -moz-osx-font-smoothing:灰度;

  文本对齐:居中;

  颜色:# 2c3e50

  }

  #nav {

  填充:30px

  一个{

  字体粗细:粗体;

  颜色:# 2c3e50。路由器-链路-精确-活动{

  颜色:# 42b983

  }

  }

  }

  /风格

  

配置代理

  因为我们要在本地环境进行测试,这就涉及到了跨域问题,为了解决跨域问题,我们可以进行代理的配置,在项目根目录中创建vue。配置。射流研究…文件,然后可以对项目进行各种配置,代理的配置方法如下:

  //vue.config.js

  模块。导出={

  //输出文件目录

  输出目录:距离,

  //eslint-loader是否在保存的时候检查

  lintOnSave:假的,

  //基本路径

  公共路径:过程。环境。node _ ENV=== production ?/ : /,

  devServer: {

  主机:"本地主机",

  端口:8080,

  开:真的,

  hotOnly: true,//热更新

  //设置代理

  代理服务器:{

  /api: {

  //本地模拟服务器

  目标: https://www.xxxx.com/xxx/,

  changeOrigin:真的,

  ws:假的,

  },

  //如果项目中有多个域名接口,可以依次配置。

  /apib:{

  目标: https://www.xxxx.com/xxx/,

  changeOrigin:真的,

  ws:假的,

  },

  },

  },

  };

  配置代理后,您可以运行项目。在命令行中输入npm run serve。项目启动后,可以进入页面点击按钮,测试之前做的封装是否工作良好。

  

结语

  这是我在vue中包装axios的经验。文章如有错误或改进请联系我,我会及时改正。感谢阅读。

  那就是把axios封装在vue中,实现api接口统一管理的细节。更多关于在vue中封装axios的信息,请关注我们的其他相关文章!

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

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