详解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 相关文章推荐
将CKfinder整合进CKEditor3.0的新方法
Jan 10 Javascript
javascript学习笔记(二) js一些基本概念
Jun 18 Javascript
用客户端js实现带省略号的分页
Apr 27 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
Jul 27 Javascript
详解JavaScript中this关键字的用法
May 26 Javascript
js html5 css俄罗斯方块游戏再现
Oct 17 Javascript
jquery操作ul的一些操作笔记整理(干货)
Aug 31 jQuery
js中json对象和字符串的理解及相互转化操作实现方法
Sep 22 Javascript
vue轮播图插件vue-concise-slider的使用
Mar 13 Javascript
微信小程序template模版的使用方法
Apr 13 Javascript
jQuery表单选择器用法详解
Aug 22 jQuery
基于JS实现快速读取TXT文件
Aug 25 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实现的在线人员函数库
2008/04/09 PHP
解析Win7 XAMPP apache无法启动的问题
2013/06/26 PHP
PHP连接sql server 2005环境配置及问题解决
2014/08/08 PHP
PHP中spl_autoload_register()函数用法实例详解
2016/07/18 PHP
PHP7引入的"??"和"?:"的区别讲解
2019/04/08 PHP
面向对象Javascript核心支持代码分享
2012/05/23 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
2013/01/11 Javascript
jQuery判断iframe中元素是否存在的方法
2013/05/11 Javascript
用JS在浏览器中创建下载文件
2014/03/05 Javascript
图片放大镜jquery.jqzoom.js使用实例附放大镜图标
2014/06/19 Javascript
利用Js+Css实现折纸动态导航效果实例源码
2017/01/25 Javascript
JS检测数组类型的方法小结
2017/03/14 Javascript
jQuery中常用动画效果函数知识点整理
2018/08/19 jQuery
javascript 设计模式之享元模式原理与应用详解
2020/04/08 Javascript
angular组件间通讯的实现方法示例
2020/05/07 Javascript
JS使用Chrome浏览器实现调试线上代码
2020/07/23 Javascript
[07:12]2014DOTA2西雅图国际邀请赛 黑马Liquid专题采访
2014/07/12 DOTA
[42:06]2019国际邀请赛全明星赛 8.23
2019/09/05 DOTA
30分钟搭建Python的Flask框架并在上面编写第一个应用
2015/03/30 Python
python使用两种发邮件的方式smtp和outlook示例
2017/06/02 Python
python中使用%与.format格式化文本方法解析
2017/12/27 Python
Python3实现带附件的定时发送邮件功能
2020/12/22 Python
Python使用socket_TCP实现小文件下载功能
2020/10/09 Python
python 使用cycle构造无限循环迭代器
2020/12/02 Python
ECCO爱步美国官网:来自丹麦的鞋履品牌
2016/11/23 全球购物
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
一些.net面试题
2014/10/06 面试题
会计与出纳自荐书范文
2014/03/16 职场文书
我的小天地教学反思
2014/04/30 职场文书
农民工讨薪标语
2014/06/26 职场文书
沂蒙六姐妹观后感
2015/06/08 职场文书
敬老院活动感想
2015/08/07 职场文书
高中化学教学反思
2016/02/22 职场文书
90行Python代码开发个人云盘应用
2021/04/20 Python
Java面试题冲刺第十九天--数据库(4)
2021/08/07 Java/Android
JS实现数组去重的11种方法总结
2022/04/04 Javascript