详解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 相关文章推荐
弹出层之1:JQuery.Boxy (一) 使用介绍
Oct 06 Javascript
自定义的一个简单时尚js下拉选择框
Nov 20 Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
May 25 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
Dec 04 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
Oct 24 Javascript
jQuery图片拖动组件Dropzone用法示例
Jan 17 Javascript
AngularJS自定义指令详解(有分页插件代码)
Jun 12 Javascript
JS内部事件机制之单线程原理
Jul 02 Javascript
微信小程序左右滚动公告栏效果代码实例
Sep 16 Javascript
优雅的使用javascript递归画一棵结构树示例代码
Sep 22 Javascript
Vue 实现一个命令式弹窗组件功能
Sep 25 Javascript
React配置子路由的实现
Jun 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中3des加密代码(完全与.net中的兼容)
2012/08/02 PHP
基于Zend的Config机制的应用分析
2013/05/02 PHP
PIGCMS 如何关闭聊天机器人
2015/02/12 PHP
php禁止某ip或ip地址段访问的方法
2015/02/25 PHP
prototype与jquery下Ajax实现的差别
2009/09/13 Javascript
js动态给table添加/删除tr的方法
2013/08/02 Javascript
Javascript中的关键字和保留字整理
2014/10/16 Javascript
jQuery中after()方法用法实例
2014/12/25 Javascript
JavaScript操作cookie类实例
2015/03/31 Javascript
NodeJS创建基础应用并应用模板引擎
2016/04/12 NodeJs
jQuery简单实现title提示效果示例
2016/08/01 Javascript
js 转义字符及URI编码详解
2017/02/28 Javascript
使用nodeJs来安装less及编译less文件为css文件的方法
2017/11/20 NodeJs
解决vue 打包发布去#和页面空白的问题
2018/09/04 Javascript
Vue核心概念Action的总结
2019/01/18 Javascript
vue使用高德地图根据坐标定位点的实现代码
2019/08/22 Javascript
Vue v-bind动态绑定class实例方法
2020/01/15 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
[49:08]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
11个并不被常用但对开发非常有帮助的Python库
2015/03/31 Python
浅析Python中的join()方法的使用
2015/05/19 Python
Python中的自省(反射)详解
2015/06/02 Python
Python聊天室实例程序分享
2016/01/05 Python
对Python中数组的几种使用方法总结
2018/06/28 Python
python自动化生成IOS的图标
2018/11/13 Python
对Tensorflow中Device实例的生成和管理详解
2020/02/04 Python
Sneaker Studio罗马尼亚网站:购买运动鞋
2018/11/04 全球购物
.net工程师笔试题
2012/06/09 面试题
化验室技术员岗位职责
2013/12/24 职场文书
机关党建工作汇报材料
2014/08/20 职场文书
法人委托书范本格式
2014/09/15 职场文书
乡镇领导干部个人对照检查材料思想汇报
2014/09/23 职场文书
2015年全国爱眼日活动小结
2015/02/27 职场文书
MySQL为id选择合适的数据类型
2021/06/07 MySQL
python实现对doc、txt、xls等文档的读写操作
2022/04/02 Python
Python实现为PDF去除水印的示例代码
2022/04/03 Python