详解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面向对象编程(一) 实例代码
Jun 25 Javascript
jQuery 1.5.1 发布,全面支持IE9 修复大量bug
Feb 26 Javascript
用JQUERY增删元素的代码
Feb 14 Javascript
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
Jan 25 Javascript
jQuery制作简洁的多级联动Select下拉框
Dec 23 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
Jul 03 Javascript
vue源码入口文件分析(推荐)
Jan 30 Javascript
vue-router 源码实现前端路由的两种方式
Jul 02 Javascript
微信小程序文章详情页面实现代码
Sep 10 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
Apr 11 Javascript
vue 全局环境切换问题
Oct 27 Javascript
使用PreloadJS加载图片资源的基础方法详解
Feb 03 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 文本文件的读取效率
2012/02/10 PHP
php根据日期显示所在星座的方法
2015/07/13 PHP
jquery 问答知识整理
2010/02/11 Javascript
javascript中使用css需要注意的地方小结
2010/09/01 Javascript
JavaScript对象创建及继承原理实例解剖
2013/02/28 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
编写简单的jQuery提示插件
2014/12/21 Javascript
通过BootStrap-select插件 js jQuery控制select属性变化
2017/01/03 Javascript
详谈js中数组(array)和对象(object)的区别
2017/02/27 Javascript
详解如何在react中搭建d3力导向图
2018/01/12 Javascript
express express-session的使用小结
2018/12/12 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
详解从react转职到vue开发的项目准备
2019/01/14 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
haskell实现多线程服务器实例代码
2013/11/26 Python
python使用fileinput模块实现逐行读取文件的方法
2015/04/29 Python
python中字符串前面加r的作用
2015/06/04 Python
基于numpy.random.randn()与rand()的区别详解
2018/04/17 Python
详解python中的装饰器
2018/07/10 Python
Python global全局变量函数详解
2018/09/18 Python
pycharm执行python时,填写参数的方法
2018/10/29 Python
Python实现将通信达.day文件读取为DataFrame
2018/12/22 Python
python 图像插值 最近邻、双线性、双三次实例
2020/07/05 Python
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
西班牙伏林航空公司:Vueling
2016/08/05 全球购物
波兰品牌鞋履在线商店:Eastend.pl
2020/01/11 全球购物
经济实惠的名牌太阳镜和眼镜:Privé Revaux
2021/02/07 全球购物
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
2014/09/09 面试题
Linux不知道文件后缀名怎么判断文件类型
2014/08/21 面试题
财务会计自荐信范文
2014/02/21 职场文书
2014年生活老师工作总结
2014/12/23 职场文书
护士心得体会范文
2016/01/25 职场文书
离婚协议书范文2016
2016/03/18 职场文书
导游词之平津战役纪念馆
2019/11/04 职场文书
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
2022/04/20 MySQL