详解Vue中Axios封装API接口的思路及方法


Posted in Javascript onOctober 10, 2020

一、axios的封装

在vue项目中,和后台交互获取数据这块,我们通常使用的是axios库,它是基于promise的http库,可运行在浏览器端和node.js中。他有很多优秀的特性,例如拦截请求和响应、取消请求、转换json、客户端防御XSRF等。

在一个项目中我们如果要使用很多接口的话,总不能在每个页面都写满了.get()或者.post()吧?所以我们就要自己手动封装一个全局的Axios网络模块,这样的话就既方便也会使代码量不那么冗余。

安装

> npm install axios //这个就是安装axios的命令

首先我们要现在项目中安装Axios组件,这一步是一定的。

下载好了以后,就在项目的src文件里再新建两个目录,一个是http,一个是api。http目录是用来封装Axios的,api目录是用来统一来管理我们的接口的。

引入

第一步,先要在http.js里面引入axios

import axios from 'axios'

环境的切换

在我们开发项目的时候会有多种环境,就比如开发环境、测试环境、生产环境,使用axios.defaults.baseURL可以设置axios的默认请求地址。

//在开发环境中的测试 development
if(process.env.NODE_ENV == 'development') {
 axios.defaults.baseURL = 'http://120.53.31.103:84/'
}
//在生产环境中的测试 production
if(process.env.NODE_ENV == 'production') {
 axios.defaults.baseURL = 'https://wap.365msmk.com/'
}
//还有一种环境 debug

设置响应超时时间

通过axios.defaults.timeout设置默认的请求超时时间。如果超出了响应时间,就会告知用户当前请求超时,请刷新等等

//响应超时的时间
axios.defaults.timeout = 5000;

设置接口请求拦截

//接口请求拦截
axios.interceptors.request.use(
 config => {
 config.headers = { DeviceType : 'H5' } //设置响应头部
 return config
 }
)

使用promise返回axios请求的结果

post :

export function get(url,params){
 return new Promise((resolve,reject) => {
 axios.get(url,{
  params : params
 }).then(res => {
  resolve(res)
 }).catch(err => {
  reject(err)
 })
 })
}

get :

export function post(url,params){
 return new Promise((resolve,reject) => {
 axios.post(url,params)
 .then(res => {
  resolve(res.data)
 })
 .catch(err => {
  reject(err.data)
 })
 })
}

这个时候,http.js里面的就写好了。下面就要去api.js去获取api接口了。

现在是api.js中的内容

首先是要在api.js中引入刚刚封装好的axios

import {get,post} from '../http/http.js'
//get post 同时都要引入

然后就可以根据接口文档来进行数据的获取啦

//封装接口的方法
export function getAppIndex() {
 return get('api/app/recommend/appIndex')
}

export function getBanner() {
 return get('api/app/banner')
}

export function getTel() {
 return post('api/app/smsCode',{
  //这里用的是params传参,直接写{}就可,不用再声明params啦
  mobile : 18567391972,
  sms_type : 'login'
 })
}

再再然后,就可以去vue页面通过生命周期来获取数据啦。

再再再注意,这里不一定一定要使用async函数,这只是其中一种方法啦

async mounted() {
  // 明星讲师、精品课程等等
  let res = await getAppIndex();
  
  //添加到数组
  this.startList = res.data.data.list
  
  // 轮播图列表
  var banner = await getBanner();
  // console.log('轮播图'+ banner)
  if (banner.data.code == 200) {
  this.bannerList = banner.data.data
  }

  // 手机验证码接口
  let Tel = await getTel();
  // console.log('手机验证码'+ Tel)

  //
 },

到此这篇关于详解Vue中Axios封装API接口的思路及方法的文章就介绍到这了,更多相关Vue Axios封装API接口内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript表单常用验证集合
Jan 16 Javascript
基于jquery 的一个progressbar widge
Oct 29 Javascript
javascript判断两个IP地址是否在同一个网段的实现思路
Dec 13 Javascript
javascript检查某个元素在数组中的索引值
Mar 30 Javascript
jquery获取form表单input元素值的简单实例
May 30 Javascript
JavaScript中校验银行卡号的实现代码
Dec 19 Javascript
jQuery设置图片等比例缩小的方法
Apr 29 jQuery
深究AngularJS中ng-drag、ng-drop的用法
Jun 12 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
Oct 27 Javascript
angular5 子组件监听父组件传入值的变化方法
Sep 30 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
Apr 04 Javascript
js实现随机div颜色位置 类似满天星效果
Oct 24 Javascript
在Vue中使用Echarts实例图的方法实例
Oct 10 #Javascript
基于Vue.js+Nuxt开发自定义弹出层组件
Oct 09 #Javascript
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
Oct 09 #jQuery
vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法
Oct 09 #Javascript
vue实现选中效果
Oct 07 #Javascript
electron踩坑之dialog中的callback解决
Oct 06 #Javascript
electron踩坑之remote of undefined的解决
Oct 06 #Javascript
You might like
在PHP中养成7个面向对象的好习惯
2010/07/17 PHP
php 魔术常量详解及实例代码
2016/12/04 PHP
Extjs入门之动态加载树代码
2010/04/09 Javascript
js中将字符串转换成json的三种方式
2011/01/12 Javascript
将字符串转换成gb2312或者utf-8编码的参数(js版)
2013/04/10 Javascript
jquery中focus()函数实现当对象获得焦点后自动把光标移到内容最后
2013/09/29 Javascript
JS教程:window.location使用方法的区别介绍
2013/10/04 Javascript
当json键为数字时的取值方法解析
2013/11/15 Javascript
JS绘制生成花瓣效果的方法
2015/08/05 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
2016/05/03 Javascript
值得分享和收藏的Bootstrap学习教程
2016/05/12 Javascript
jQuery实现发送验证码并60秒倒计时功能
2016/11/25 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
2017/05/17 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
2018/01/24 Javascript
vue element-ui table组件动态生成表头和数据并修改单元格格式 父子组件通信
2019/08/15 Javascript
nodejs+koa2 实现模仿springMVC框架
2020/10/21 NodeJs
[04:29]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/02/01 DOTA
Python Web框架Flask信号机制(signals)介绍
2015/01/01 Python
在Python下利用OpenCV来旋转图像的教程
2015/04/16 Python
Python处理字符串之isspace()方法的使用
2015/05/19 Python
浅谈python新手中常见的疑惑及解答
2016/06/14 Python
Python使用smtplib模块发送电子邮件的流程详解
2016/06/27 Python
python入门前的第一课 python怎样入门
2018/03/06 Python
Python在for循环中更改list值的方法【推荐】
2018/08/17 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
2020/02/25 Python
Python脚本导出为exe程序的方法
2020/03/25 Python
Python在后台自动解压各种压缩文件的实现方法
2020/11/10 Python
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
机械设计专业应届生求职信
2013/11/21 职场文书
个人收入证明模板
2014/09/18 职场文书
2014教师党员自我评议(5篇)
2014/09/20 职场文书
党的群众路线对照检查材料思想汇报(学校)
2014/10/04 职场文书
2015年大学生村官工作总结
2015/04/21 职场文书
党性教育心得体会(共6篇)
2016/01/21 职场文书
Python列表的索引与切片
2022/04/07 Python