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 相关文章推荐
一端时间轮换的广告
Jun 26 Javascript
修改jquery里的dialog对话框插件为框架页(iframe) 的方法
Sep 14 Javascript
cnblogs 代码高亮显示后的代码复制问题解决实现代码
Dec 14 Javascript
JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
Dec 17 Javascript
JavaScript学习笔记之JS事件对象
Jan 22 Javascript
jquery获取所有选中的checkbox实现代码
May 26 Javascript
把普通对象转换成json格式的对象的简单实例
Jul 04 Javascript
原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)
Oct 29 Javascript
解决vue中使用swiper插件问题及swiper在vue中的用法
Apr 04 Javascript
vue表单中遍历表单操作按钮的显示隐藏示例
Oct 30 Javascript
解决vue动态路由异步加载import组件,加载不到module的问题
Jul 26 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
Sep 24 Javascript
基于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
WindowsXP中快速配置Apache+PHP5+Mysql
2008/06/05 PHP
php 获取select下拉列表框的值
2010/05/08 PHP
wampserver改变默认网站目录的办法
2015/08/05 PHP
PHP使用curl函数发送Post请求的注意事项
2016/11/26 PHP
PHP使用file_get_contents发送http请求功能简单示例
2018/04/29 PHP
Discuz! 6.1_jQuery兼容问题
2008/09/23 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
2015/03/05 Javascript
.NET微信公众号开发之创建自定义菜单
2015/07/16 Javascript
浅析jQuery Ajax通用js封装
2016/06/22 Javascript
相册展示PhotoSwipe.js插件实现
2016/08/25 Javascript
js 获取元素所有兄弟节点的实现方法
2016/09/06 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
2017/03/30 Javascript
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
vue指令v-html使用过滤器filters功能实例
2019/10/25 Javascript
js实现简单点赞操作
2020/03/17 Javascript
React服务端渲染原理解析与实践
2021/03/04 Javascript
[04:16]DOTA2英雄梦之声_第09期_斧王
2014/06/21 DOTA
JavaScript实现一维数组转化为二维数组
2018/04/17 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
2018/04/23 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
python3 拼接字符串的7种方法
2018/09/12 Python
Python打包方法Pyinstaller的使用
2018/10/09 Python
使用Python编写Prometheus监控的方法
2018/10/15 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
python中bs4.BeautifulSoup的基本用法
2019/07/27 Python
python基于selenium爬取斗鱼弹幕
2021/02/20 Python
html5 canvas fillRect坐标和大小的问题解决方法
2014/03/26 HTML / CSS
lululemon美国官网:瑜伽服+跑步装备
2018/11/16 全球购物
Linux文件系统类型
2012/09/16 面试题
网络公司美工设计工作个人的自我评价
2013/11/03 职场文书
药学专业大学生个人的自我评价
2013/11/04 职场文书
幼儿园数学教学反思
2014/02/02 职场文书
户外婚礼策划方案
2014/02/08 职场文书
社区春季防火方案
2014/06/02 职场文书
巾帼文明岗汇报材料
2014/12/24 职场文书
聊一聊python常用的编程模块
2021/05/14 Python