Vue项目中如何使用Axios封装http请求详解


Posted in Javascript onOctober 23, 2019

前言

使用axios可以统一做请求响应拦截,例如请求响应时我们拦截响应信息,判断状态码,从而弹出报错信息。请求超时的时候断开请求,还可以很方便地使用then或者catch来处理请求。

安装

npm install axios --save

建立http.js文件

在/src/utils/目录下建立一个htttp.js

1.首先导入axios和router。

import axios from 'axios';
import router from '../router';

2.接着设置axios请求参数。

axios.defaults.timeout = 5000; //请求超时5秒
axios.defaults.baseURL =''; //请求base url
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; //设置post请求是的header信息

如果你要用到session验证码功能,让请求携带cookie,可以加上以下一行:

axios.defaults.withCredentials = true

3.然后,我们要给请求加个拦截器,就是在请求即将发送之前,我们需要给请求添加信息,比如下面的代码中,我们给请求添加header信息,header中添加token,这样每次请求都会在header中携带token信息。这在我们的接口开发中经常用到。

//http request 拦截器
axios.interceptors.request.use(
 config => {
 let token = sessionStorage.getItem('token')
 if (token) { // 判断是否存在token,如果存在的话,则每个http header都加上token
  config.headers = {
  'X-token': token
  }
 }
 
 return config
 }, 
 err => {
 return Promise.reject(err)
 }
)

4.接下来,我们看下请求返回时的拦截器。

比如我们发送请求时,如果后端返回错误代码,则前端应该提示信息。比如后台返回没有权限,不允许访问,跳转到登录页,这些都可在拦截器上完成。

axios.interceptors.response.use(
 response => {
 if (response.data.code === 4003) {
  Toast({
  mes: '您没有权限操作!',
  timeout: 1500,
  callback: () => {
   router.go(-1);
  }
  });
  
  return false;
 }
 if (response.data.code === -1) {
  localStorage.removeItem('token')
  router.push({
  path:"/login",
  querry:{redirect: router.currentRoute.fullPath}//从哪个页面跳转
  })
 }
 return response
 }, 
 err => {
 if (err.code === 'ECONNABORTED' && err.message.indexOf('timeout') !== -1) {
  Toast({
   mes: '网络异常,连接超时...',
   timeout: 1500
  });
 }
 return Promise.reject(err)
 }
)

5.现在我们来封装一个get方法:

/**
 * 封装get方法
 * @param url
 * @param data
 * @returns {Promise}
 */

export function get(url, params={}, headers={}){
 return new Promise((resolve, reject) => {
 axios.get(url,{
  params: params,
  headers: headers
 })
 .then(response => {
  resolve(response.data);
 })
 .catch(err => {
  reject(err)
 })
 })
}

6.再封装一个post方法:

/**
 * 封装post请求
 * @param url
 * @param data
 * @returns {Promise}
 */

 export function post(url, data = {}){
 return new Promise((resolve, reject) => {
  axios.post(url, data)
  .then(response => {
  resolve(response.data);
  }, err => {
  reject(err)
  })
 })
 }

使用

在main.js中引入:

import {post,get} from './utils/http'
//定义全局变量
Vue.prototype.$post = post;
Vue.prototype.$get = get;

在组件中使用:

this.$post(url, params)
 .then((res) => {
 if (res.result === 'success') {
  this.$message({
  message: '登录成功!',
  type: 'success'
  })
  this.$router.push('/main')
 } else {
  this.$message.error(res.msg)
  this.refreshCode();
 }
 });

这段代码是用户登录发送post请求的代码示例,其他get请求也是一样的处理方式。接下来我们会有文章具体讲解如何使用封装好的axios实现登录的例子,敬请关注。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JS对img进行操作(换图片/切图/轮换/停止)
Apr 17 Javascript
解决css和js的{}与smarty定界符冲突问题的两种方法
Sep 10 Javascript
javascript实现修改微信分享的标题内容等
Dec 11 Javascript
iScroll.js 使用方法参考
May 16 Javascript
AngularJS ng-bind-html 指令详解及实例代码
Jul 30 Javascript
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
Apr 03 Javascript
vue-quill-editor富文本编辑器简单使用方法
Sep 21 Javascript
实例分析vue循环列表动态数据的处理方法
Sep 28 Javascript
微信小程序实现的日期午别医生排班表功能示例
Jan 09 Javascript
详解js实时获取并显示当前时间的方法
May 10 Javascript
vue项目中js-cookie的使用存储token操作
Nov 13 Javascript
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
Feb 11 Vue.js
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
Oct 23 #Javascript
原生JS无缝滑动轮播图
Oct 22 #Javascript
Vue实现开心消消乐游戏算法
Oct 22 #Javascript
p5.js码绘“跳动的小正方形”的实现代码
Oct 22 #Javascript
微信小程序绑定手机号获取验证码功能
Oct 22 #Javascript
微信小程序开发之转发分享功能
Oct 22 #Javascript
微信小程序转发事件实现解析
Oct 22 #Javascript
You might like
用PHP和ACCESS写聊天室(九)
2006/10/09 PHP
php简单开启gzip压缩方法(zlib.output_compression)
2013/04/13 PHP
Zend Framework开发入门经典教程
2016/03/23 PHP
PHP时间相关常用函数用法示例
2020/06/03 PHP
通过隐藏option实现select的联动效果
2009/11/10 Javascript
js输出列表实现代码
2010/09/12 Javascript
Javascript Throttle & Debounce应用介绍
2013/03/19 Javascript
JS实现点击图片在当前页面放大并可关闭的漂亮效果
2013/10/18 Javascript
js调用打印机打印网页字体总是缩小一号的解决方法
2014/01/24 Javascript
JavaScript表单通过正则表达式验证电话号码
2014/03/14 Javascript
分享20款美化网站的 jQuery Lightbox 灯箱插件
2014/10/10 Javascript
JavaScript调试工具汇总
2014/12/23 Javascript
JS运动相关知识点小结(附弹性运动示例)
2016/01/08 Javascript
20分钟成功编写bootstrap响应式页面 就这么简单
2016/05/12 Javascript
jQuery+ajax读取并解析XML文件的方法
2016/09/09 Javascript
浅谈jQuery操作类数组的工具方法
2016/12/23 Javascript
jQuery插件zTree实现清空选中第一个节点所有子节点的方法
2017/03/08 Javascript
通过构造函数实例化对象的方法
2017/06/28 Javascript
BootStrap模态框不垂直居中的解决方法
2017/10/19 Javascript
基于Vue组件化的日期联动选择器功能的实现代码
2018/11/30 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
超详细的5个Shell脚本实例分享(值得收藏)
2019/08/15 Javascript
bootstrap table实现iview固定列的效果实例代码详解
2019/09/30 Javascript
几种实用的pythonic语法实例代码
2018/02/24 Python
django多文件上传,form提交,多对多外键保存的实例
2019/08/06 Python
django中的图片验证码功能
2019/09/18 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
浅析canvas元素的html尺寸和css尺寸对元素视觉的影响
2019/07/22 HTML / CSS
伦敦时尚生活的缩影:LN-CC
2017/01/24 全球购物
商务英语专业毕业生自荐信
2013/11/05 职场文书
临床医学应届生求职信
2013/11/06 职场文书
节约用水演讲稿
2014/05/21 职场文书
应届生求职信范文
2014/05/26 职场文书
物业品质提升方案
2014/06/08 职场文书
2016年党支部公开承诺书
2016/03/25 职场文书
Python作用域和名称空间的详细介绍
2022/04/13 Python