详解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字符串处理性能的代码
Dec 07 Javascript
IE6下CSS图片缓存问题解决方法
Dec 09 Javascript
JS实现点击下载的小例子
Jul 10 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
Jan 28 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
Aug 07 Javascript
vuejs绑定class和style样式
Apr 11 Javascript
Javascript快速实现浏览器系统通知
Aug 26 Javascript
Angular2使用vscode断点调试ts文件的方法
Dec 13 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
Jan 08 Javascript
Vue2.0 实现移动端图片上传功能
May 30 Javascript
JS实现简易留言板特效
Dec 23 Javascript
vue学习笔记之作用域插槽实例分析
Feb 01 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中fgetcsv()函数用法实例
2014/11/28 PHP
php验证手机号码
2015/11/11 PHP
Django中的cookie与session操作实例代码
2017/08/17 PHP
比较全面的event对像在IE与FF中的区别 推荐
2009/09/21 Javascript
JavaScript学习笔记之获取当前目录的实现代码
2010/12/14 Javascript
json的前台操作和后台操作实现代码
2012/01/20 Javascript
ko knockoutjs动态属性绑定技巧应用
2012/11/14 Javascript
JS实现字体选色板实例代码
2013/11/20 Javascript
Angular.Js的自动化测试详解
2016/12/09 Javascript
JavaScript实现经典排序算法之选择排序
2016/12/28 Javascript
jQuery实现弹幕效果
2017/02/17 Javascript
基于jQuery解决ios10以上版本缩放问题
2017/11/03 jQuery
解决js ajax同步请求造成浏览器假死的问题
2018/01/18 Javascript
vue两组件间值传递 $router.push实现方法
2019/05/15 Javascript
小程序登录/注册页面设计的实现代码
2019/05/24 Javascript
vue.js中导出Excel表格的案例分析
2019/06/11 Javascript
vue中js判断长时间不操作界面自动退出登录(推荐)
2020/01/22 Javascript
AJAX XMLHttpRequest对象创建使用详解
2020/08/20 Javascript
Vue路由 重定向和别名的区别说明
2020/09/09 Javascript
php使用递归与迭代实现快速排序示例
2014/01/23 Python
Python字符串和字典相关操作的实例详解
2017/09/23 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
致Python初学者 Anaconda入门使用指南完整版
2018/04/05 Python
Python中分支语句与循环语句实例详解
2018/09/13 Python
python判断一个数是否能被另一个整数整除的实例
2018/12/12 Python
django数据模型on_delete, db_constraint的使用详解
2019/12/24 Python
Python实现搜索算法的实例代码
2020/01/02 Python
Python descriptor(描述符)的实现
2020/11/15 Python
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
2016/03/14 HTML / CSS
暇步士官网:Hush Puppies
2016/09/22 全球购物
打印机墨盒:123Inkjets
2017/02/16 全球购物
XML文档面试题
2015/08/05 面试题
车间调度岗位职责
2013/11/30 职场文书
药剂专业毕业生求职信
2014/06/24 职场文书
2015年英语教研组工作总结
2015/05/23 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书