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写的操作系统
Apr 23 Javascript
js中访问html中iframe的文档对象的代码[IE6,IE7,IE8,FF]
Jan 08 Javascript
javascript开发技术大全-第1章javascript概述
Jul 03 Javascript
javascript ajax 仿百度分页函数
Oct 29 Javascript
JavaScript原型链示例分享
Jan 26 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
Mar 21 Javascript
微信JSAPI支付操作需要注意的细节
Jan 10 Javascript
基于input框覆盖掉数字英文的实例讲解
Jul 21 Javascript
如何理解Vue的render函数的具体用法
Aug 30 Javascript
nginx部署访问vue-cli搭建的项目的方法
Feb 12 Javascript
Vue2.0结合webuploader实现文件分片上传功能
Mar 09 Javascript
vue filters的使用详解
Jun 11 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
PHP中strlen()和mb_strlen()的区别浅析
2014/06/19 PHP
php打包压缩文件之ZipArchive方法用法分析
2016/04/30 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
jquery获得同源iframe内body下标签的值的方法
2014/09/25 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
2017/03/09 Javascript
详解如何在Vue2中实现组件props双向绑定
2017/03/29 Javascript
Angularjs 实现动态添加控件功能
2017/05/25 Javascript
VUE使用vuex解决模块间传值问题的方法
2017/06/01 Javascript
JS实现的简单折叠展开动画效果示例
2018/04/28 Javascript
小程序获取当前位置加搜索附近热门小区及商区的方法
2019/04/08 Javascript
在Vue项目中,防止页面被缩放和放大示例
2019/10/28 Javascript
原生js+css调节音量滑块
2020/01/15 Javascript
uniapp,微信小程序中使用 MQTT的问题
2020/07/11 Javascript
el-form 多层级表单的实现示例
2020/09/10 Javascript
[31:33]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第一场
2014/05/23 DOTA
Python多层嵌套list的递归处理方法(推荐)
2016/06/08 Python
Python 多线程共享变量的实现示例
2020/04/17 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
python3访问字典里的值实例方法
2020/11/18 Python
CSS3教程(6):创建网站多列
2009/04/02 HTML / CSS
canvas进阶之如何画出平滑的曲线
2018/10/15 HTML / CSS
英国最专业的健身器材供应商之一:Best Gym Equipment
2017/12/22 全球购物
英国复古皮包品牌:Beara Beara
2018/07/18 全球购物
名词解释型面试题(主要是网络)
2013/12/27 面试题
留学推荐信怎么写
2014/01/25 职场文书
运动会领导邀请函
2014/02/05 职场文书
家居装修公司创业计划书范文
2014/03/20 职场文书
暑期培训班招生方案
2014/08/26 职场文书
党员个人承诺书
2015/04/27 职场文书
疾病证明书
2015/06/19 职场文书
标枪加油稿
2015/07/22 职场文书
初中生物教学随笔
2015/08/15 职场文书
2016五一劳动节慰问信
2015/11/30 职场文书
2016年感恩节活动总结大全
2016/04/01 职场文书
一文了解MYSQL三大范式和表约束
2022/04/03 MySQL