详解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 相关文章推荐
基于jQuery架构javascript基础体系
Jan 01 Javascript
精通Javascript系列之Javascript基础篇
Jun 07 Javascript
HTML页面弹出居中可拖拽的自定义窗口层
May 07 Javascript
深入理解JavaScript系列(31):设计模式之代理模式详解
Mar 03 Javascript
javascript实现捕捉键盘上按下的键
May 05 Javascript
jQuery实现可拖动进度条实例代码
Jun 21 jQuery
Vue路由之JWT身份认证的实现方法
Aug 26 Javascript
JavaScript switch语句使用方法简介
Dec 30 Javascript
vue设置全局访问接口API地址操作
Aug 14 Javascript
vue绑定数字类型 value为数字的实例
Aug 31 Javascript
Nuxt.js 静态资源和打包的操作
Nov 06 Javascript
vue导入.md文件的步骤(markdown转HTML)
Dec 31 Vue.js
在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读取本地文件常用函数(fopen与file_get_contents)
2013/09/09 PHP
PHP将页面中点击数量高的链接进行高亮显示的方法
2016/05/30 PHP
prototype Element学习笔记(篇二)
2008/10/26 Javascript
jquery中实现简单的tabs插件功能的代码
2011/03/02 Javascript
jQuery动态添加 input type=file的实现代码
2012/06/14 Javascript
js中top/parent/frame概述及案例应用
2013/02/06 Javascript
用js代码和插件实现wordpress雪花飘落效果的四种方法
2014/12/15 Javascript
JavaScript实现点击文字切换登录窗口的方法
2015/05/11 Javascript
基于javascript实现单选及多选的向右和向左移动实例
2015/07/25 Javascript
Javascript设计模式理论与编程实战之简单工厂模式
2015/11/03 Javascript
莱鸟介绍window.print()方法
2016/01/06 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
2016/04/27 Javascript
微信小程序 商城开发(ecshop )简单实例
2017/04/07 Javascript
基于BootStrap的前端分页带省略号和上下页效果
2017/05/18 Javascript
react实现点击选中的li高亮的示例代码
2018/05/24 Javascript
vue中promise的使用及异步请求数据的方法
2018/11/08 Javascript
vue  elementUI 表单嵌套验证的实例代码
2019/11/06 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
vue实现简单学生信息管理
2020/05/30 Javascript
swiper4实现移动端导航栏tab滑动切换
2020/10/16 Javascript
[00:31]DOTA2上海特级锦标赛 Fnatic战队宣传片
2016/03/04 DOTA
[03:59]5分钟带你了解什么是DOTA2(第二期)
2017/02/07 DOTA
Python中is和==的区别详解
2018/11/15 Python
Python图像的增强处理操作示例【基于ImageEnhance类】
2019/01/03 Python
Python3实现的反转单链表算法示例
2019/03/08 Python
Python numpy.zero() 初始化矩阵实例
2019/11/27 Python
Python语言异常处理测试过程解析
2020/01/08 Python
CSS3 实现发光边框特效
2020/11/11 HTML / CSS
Tripadvisor新西兰:阅读评论,比较价格和酒店预订
2018/02/10 全球购物
澳大利亚一站式数码相机商店:CameraPro
2020/03/09 全球购物
编程实现去掉XML的重复结点
2014/05/28 面试题
解释下面关于J2EE的名词
2013/11/15 面试题
大班开学家长寄语
2014/04/04 职场文书
2015年春训学习心得体会范文
2015/03/09 职场文书
全民创业工作总结
2015/08/13 职场文书
Rust中的Struct使用示例详解
2022/08/14 Javascript