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 相关文章推荐
ExtJS PropertyGrid中使用Combobox选择值问题
Jun 13 Javascript
解决Jquery鼠标经过不停滑动的问题
Mar 03 Javascript
js键盘事件的keyCode
Jul 29 Javascript
node.js中的fs.stat方法使用说明
Dec 16 Javascript
jQuery实现邮箱下拉列表自动补全功能
Sep 08 Javascript
webpack入门必知必会
Jan 16 Javascript
使用canvas及js简单生成验证码方法
Apr 02 Javascript
JavaScript中正则表达式使数字、中文或指定字符高亮显示
Oct 31 Javascript
基于 Vue 实现一个酷炫的 menu插件
Nov 14 Javascript
Js视频播放器插件Video.js使用方法详解
Feb 04 Javascript
vue 修改 data 数据问题并实时显示操作
Sep 07 Javascript
小程序实现文字循环滚动动画
Jun 14 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
2020年4月放送!《Princess Connect Re:Dive》制作组 & 角色声优公开!
2020/03/06 日漫
php变量范围介绍
2012/10/15 PHP
php版微信公众号自定义分享内容实现方法
2016/09/22 PHP
php array_merge_recursive 数组合并
2016/10/26 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
2017/03/08 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
2017/06/07 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
PHP+ajax实现获取新闻数据简单示例
2018/05/08 PHP
Prototype使用指南之array.js
2007/01/10 Javascript
JavaScript 创建运动框架的实现代码
2013/05/08 Javascript
页面加载完毕后滚动条自动滚动一定位置
2014/02/20 Javascript
javascript的document.referrer浏览器支持、失效情况总结
2014/07/18 Javascript
js实现单击图片放大图片的方法
2015/02/17 Javascript
javascript制作照片墙及制作过程中出现的问题
2016/04/04 Javascript
Angular 开发学习之Angular CLI的安装使用
2017/12/31 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
vue实现在线预览pdf文件和下载(pdf.js)
2019/11/26 Javascript
Vue.js实现大屏数字滚动翻转效果
2019/11/29 Javascript
JS造成内存泄漏的几种情况实例分析
2020/03/02 Javascript
vue设置全局访问接口API地址操作
2020/08/14 Javascript
wxpython中自定义事件的实现与使用方法分析
2016/07/21 Python
python3实现跳一跳点击跳跃
2018/01/08 Python
在Python中居然可以定义两个同名通参数的函数
2019/01/31 Python
nginx+uwsgi+django环境搭建的方法步骤
2019/11/25 Python
python super函数使用方法详解
2020/02/14 Python
keras导入weights方式
2020/06/12 Python
Python classmethod装饰器原理及用法解析
2020/10/17 Python
C#和SQL Server的面试题
2016/08/12 面试题
C#里面如何判断一个Object是否是某种类型(如Boolean)?
2016/02/10 面试题
Linux文件操作命令都有哪些
2015/02/27 面试题
秋天的雨教学反思
2014/04/27 职场文书
安全宣传标语
2014/06/10 职场文书
同学聚会感言一句话
2015/07/30 职场文书
学校隐患排查制度
2015/08/05 职场文书
Android在Sqlite3中的应用及多线程使用数据库的建议
2022/04/24 Java/Android