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 相关文章推荐
让网页根据不同IE版本显示不同的内容
Feb 08 Javascript
文本框获得焦点和失去焦点的判断代码
Mar 18 Javascript
JS小功能(checkbox实现全选和全取消)实例代码
Nov 28 Javascript
JS回调函数的应用简单实例
Sep 17 Javascript
input输入框鼠标焦点提示信息
Mar 17 Javascript
跟我学习javascript创建对象(类)的8种方法
Nov 20 Javascript
js中json处理总结之JSON.parse
Oct 14 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
Nov 25 Javascript
详解webpack解惑:require的五种用法
Jun 09 Javascript
微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
Nov 16 Javascript
微信小程序 bindtap 传参的实例代码
Feb 21 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
Dec 02 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开发规范手册之PHP代码规范详解
2011/01/13 PHP
总结PHP内存释放以及垃圾回收
2018/03/29 PHP
漂亮的thinkphp 跳转页封装示例
2019/10/16 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
Sample script that deletes a SQL Server database
2007/06/16 Javascript
Js 回车换行处理的办法及replace方法应用
2013/01/24 Javascript
Jquery.Form 异步提交表单的简单实例
2014/03/03 Javascript
js控制再次点击按钮之间的间隔时间可防止重复提交
2014/08/01 Javascript
node.js中的http.response.addTrailers方法使用说明
2014/12/14 Javascript
jQuery弹出框代码封装DialogHelper
2015/01/30 Javascript
js仿QQ中对联系人向左滑动、滑出删除按钮的操作
2016/04/07 Javascript
JS中使用DOM来控制HTML元素
2016/07/31 Javascript
vue组件父子间通信之综合练习(聊天室)
2017/11/07 Javascript
在vue中利用v-html按分号将文本换行的例子
2019/11/14 Javascript
Vue3 的响应式和以前有什么区别,Proxy 无敌?
2020/05/20 Javascript
JavaScript经典案例之简易计算器
2020/08/24 Javascript
python 默认参数问题的陷阱
2016/02/29 Python
python3操作微信itchat实现发送图片
2018/02/24 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
2018/04/27 Python
python多线程案例之多任务copy文件完整实例
2019/10/29 Python
Python-numpy实现灰度图像的分块和合并方式
2020/01/09 Python
new_zeros() pytorch版本的转换方式
2020/02/18 Python
HTML5所有标签汇总及标签意义解释
2015/03/12 HTML / CSS
HTML5自定义元素播放焦点图动画的实现
2019/09/25 HTML / CSS
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
大学生护理专业自荐信
2013/10/03 职场文书
党建工作先进材料
2014/05/02 职场文书
毕业生求职信范文
2014/06/29 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
公司离职证明标准格式
2014/11/18 职场文书
班级班风口号大全
2015/12/25 职场文书
干货:如何写好工作计划!
2019/05/17 职场文书
创业计划书之淘宝网店
2019/10/08 职场文书
Java输出Hello World完美过程解析
2021/06/13 Java/Android
Python基础教程,Python入门教程(超详细)
2021/06/24 Python