关于axios的两种拦截方式:请求拦截和响应拦截

这篇具有很好参考价值的文章主要介绍了关于axios的两种拦截方式:请求拦截和响应拦截。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

axios的两种拦截方式



前言

提示:这里可以添加本文要记录的大概内容:

关于axios的interceptors(拦截器)


提示:以下是本篇文章正文内容,下面案例可供参考

一、请求拦截

axios.interceptors.request.use() 请求拦截

axios.interceptors.request.use( function ( config ) { return config })
这个方法的参数是一个函数,发送请求之前就会执行这个函数,函数里面的参数就是执行这个函数拦截到的配置对象config

我们为什么要做请求拦截?

答:可以发起请求之前,做一个拦截,把数据(参数,配置…)做了处理再发送请求。

  • 因为post请求传参需要用字符串的方式 axios.post(‘/type’,‘pageSize=2’).then(res=> {})
  • 但是写对象的参数,对我们开发会友好一点 axios.post(‘/type’,{pageSize: 2}).then(res=> {}),可是这样会导致错误
    -axios响应拦截,javascript,前端,html,vue.js,ajax - 所以我们就可以用请求拦截去处理: 把对象转成表单类型的字符串
axios.defaults.baseURL = '路由接口的根地址'
// 假设每个接口都有一个固定的参数
// pageSize : 固定为2个

// 可以发起请求之前,做一个拦截,把数据(参数,配置...)做了处理再发送请求
// 请求拦截

// 参数是一个函数,发送请求之前就会执行这个函数,它的参数就是拦截到的配置对象
axios.interceptors.request.use(function(config){
	console.log(config) 
	// config 就是配置对象

	// 在这里可以修改config
	// 比如添加固定的参数
	config.params = {
		pageSize: 3
	}
	return config; // 返回配置对象, 不返回就没有任何参数了
})

axios.get('/hot',{
	params: {
		pageSize: 2
	}
}).then(res=>{
	console.log(res.data)
})

axios.get('/soon').then(res=>{
	console.log(res.data)
})

我们打印一下config
axios响应拦截,javascript,前端,html,vue.js,ajax
我们可以看到,在config属性中添加了params属性,并且单纯的请求方法中传的参数无效,但是请求拦截中传递的参数有效

对POST请求参数做配置,使我们传参的时候可以写成对象的形式

baseURL可以直接在请求拦截的config中配置
1. 第一种方法:手工拼接
axios.defaults.baseURL = '接口路由地址'
一 手工拼接的方式
// axios.interceptors.request.use(function(config){
	// 	// {type:'NBA',size:5,page:3}  -->  'type=NBA&size=5&page=3'
	// 	// console.log(config.data)
	// 	let str = '';
	// 	for(let item in config.data){
	// 		// console.log(item) key
	// 		// console.log(config.data[item]) value
	// 		str += item+'='+config.data[item]+'&'
	// 	}
	// 	// console.log(str.slice(0,-1))  
	// 	str = str.slice(0,-1) // 去掉最后一个&
	// 	config.data = str  // 拼接好的str赋值给config.data
	// 	return config;
	// })
	// 写对象的参数,对我们开发会友好一点
	// 我们就可以用请求去处理: 把对象转成表单类型的字符串
	axios.post('/news', {type:'NBA',size:5,page:3}).then(res=>{
		console.log(res.data)
	})
2. 第二种方法:URLSearchParams

axios响应拦截,javascript,前端,html,vue.js,ajax

// 二 使用 URLSearchParams的方式实现
axios.defaults.baseURL = '接口路由地址'
	axios.interceptors.request.use(function(config){
		// 1.创建URLSearchParams 实例
		let pData = new URLSearchParams();
		
		// 2. 遍历参数对象
		for(let item in config.data){  
			// 3. 调用append()
			// 参数1:key   前面的值=
			// 参数2:value  =后面的值
			pData.append(item,config.data[item])
		}
		//params的结果就是拼接好的 表单类型参数的字符串  
		// console.log(params.toString())  
		config.data = pData
		return config
	})

// 写对象的参数,对我们开发会友好一点
// 我们就可以用请求去处理: 把对象转成表单类型的字符串
axios.post('/news', {type:'NBA',size:5,page:3}).then(res=>{
	console.log(res.data)
})
3. 第三种方法: npm.js 下载qs工具包
import axios from 'axios';
import qs from 'qs'

// 1.创建实例
const myaxios = axios.create({
  baseURL: '请求路由地址'
})

// 请求拦截
myaxios.interceptors.request.use(function(config){
  // 使用qs 来处理post的参数
  config.data = qs.stringify(config.data)
  return config
})

二、响应拦截

axios.interceptors.response.use() 响应拦截

axios.interceptors.response.use( function ( res ) { return res } )
这个方法的参数是一个函数,请求成功之前后就会执行这个函数,函数里面的参数就是执行这个函数拦截到的结果数据

我们为什么要做响应拦截?

答:在请求成功之后,对数据有固定处理方式,就可以在响应拦截里面做。比如直接返回data,减少返回数据获取的代码量;还有一些状态的固定处理,不同的后端,他们代码风格可能是不一样。有些可能是用code 表示状态 eg:20000代表成功 50002没有权限 …。还有些用status表示状态, eg: success 代表成功, fail代表失败,只能要是后端代码风格确定了,这些状态通常是不会变的了。比如: 返回的请求失败的状态码,那就可以做一个通用的处理,给一个弹框提示。
axios响应拦截,javascript,前端,html,vue.js,ajax

对data和返回的状态做处理

axios.defaults.baseURL = '路由接口地址'
// 响应拦截
axios.interceptors.response.use(function(res){
	// console.log(res)
	if(res.data.code == '20000'){
		return res.data
	}else if(res.data.code == '50002') {
		alert('没有权限')
		return res
	}else {
		alert('请求出错')
		return res
	}
})

axios.post('/news', {type:'NBA',size:5,page:3}).then(res=>{
	console.log(res)
})

三、总结

html页面中使用
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title></title>
</head>
<body>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script type="text/javascript">
	axios.defaults.baseURL = '请求路由地址'
	axios.interceptors.request.use(function(config){
		let params = new URLSearchParams();
		for(let item in config.data){  
			params.append(item,config.data[item])
		}
		config.data = params
		return config
	})

	// 响应拦截
	axios.interceptors.response.use(function(res){
		// console.log(res)
		if(res.data.code == '20000'){
			return res.data
		}else if(res.data.code == '50002') {
			alert('没有权限')
			return res
		}else {
			alert('请求出错')
			return res
		}
	})

	axios.post('/news', {type:'NBA',size:5,page:3}).then(res=>{
		console.log(res)
	})
</script>
</body>
</html>
Vue项目中使用
import axios from 'axios';
import qs from 'qs'

// 1.创建实例
const myaxios = axios.create({
  baseURL: '请求路由地址'
})

// 请求拦截
myaxios.interceptors.request.use(function(config){
  // 使用qs 来处理post的参数
  config.data = qs.stringify(config.data)
  return config
})

// 响应拦截
myaxios.interceptors.response.use(function(res){
  return res.data
})

export default myaxios


提示:文章总结:

以上就是今天要讲的内容,本文介绍了axios的两种拦截,希望开开心心快快乐乐,无忧无虑没有烦恼。文章来源地址https://www.toymoban.com/news/detail-819964.html

到了这里,关于关于axios的两种拦截方式:请求拦截和响应拦截的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • axios 中使用请求响应拦截器

    axios 简介: Axios 是一个 基于 promise 网络请求库 ,作用于 node.js 和浏览器 中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在 服务端它使用原生 node.js http 模块 , 而在 客户端 (浏览端) 则使用 XMLHttpRequests 。 axios的特性: 从浏览器创建 XMLHttpRequests 从 node.js 创

    2024年02月16日
    浏览(38)
  • axios拦截器,如何批量处理请求响应

    从浏览器创建 XMLHttpRequests 从 node.js 创建 http 请求 支持 Promise API 拦截请求和响应 转换请求和响应数据 取消请求 自动转换JSON数据 客户端支持防御XSRF 在请求或响应被 then 或 catch 处理前拦截它们。 新建request.js,写入以下内容: 在需要使用的页面进行调用 上一步咱们将axios拦

    2024年02月13日
    浏览(31)
  • 封装axios的两种方式

    作为前端工程师,经常需要对axios进行封装以满足复用的目的。在不同的前端项目中使用相同的axios封装有利于保持一致性,有利于数据之间的传递和处理。本文提供两种对axios进行封装的思路。 首先导入了 axios, AxiosInstance和AxiosResponse模块 ,用于创建一个http请求的实例和处理

    2024年02月08日
    浏览(34)
  • 简单易懂:Axios 如何取消请求的两种方法

    在前端开发中,网络请求是非常常见的操作。而有时候,我们可能需要在发送请求后取消它,比如用户在请求还未完成时离开了当前页面或者执行了其他操作,本文将介绍如何在使用 Axios 发送请求时取消这些请求。 在 Axios 中,取消请求的基本思路是创建一个用于取消的标记

    2024年01月19日
    浏览(40)
  • uniapp 微信小程序 封装axios 包含请求拦截、响应拦截、无感刷新令牌功能

    前言: 1、为什么不适用uniapp自带的请求功能? 答:uniapp自带的请求功能,再刷新了令牌后,重新请求返回的数据无法返回给发起请求的方法。也就是说,刷新令牌后重新发起的请求和第一次发起请求的方法是割裂的。 2、封装文件中,我设置了无感刷新令牌功能。我后台的

    2024年02月03日
    浏览(48)
  • anxios封装拦截器的两种方式

    使用方法 讲解:函数式通过调用方法创建axios实例,通过参数传入基础url,超时时间等定义参数。 使用时比较接近axios写法。 使用方法 类方法: 通过创建一个类,传入baseUrl,超时时间等自定义参数。使用时候调用类的方法实现创建axios实例。 两种方法写法不同,功能相同。

    2024年01月19日
    浏览(44)
  • Vue 网络处理 - axios 异步请求的使用,请求响应拦截器(最佳实践)

    目录 一、axiox 1.1、axios 简介 1.2、axios 基本使用 1.2.1、下载核心 js 文件. 1.2.2、发送 GET 异步请求 1.2.3、发送 POST 异步请求 1.2.4、发送 GET、POST 请求最佳实践 1.3、请求响应拦截器 1.3.1、拦截器解释 1.3.2、请求拦截器的使用 1.3.3、响应拦截器的使用 1.3.4、拦截器在 Vue 脚手架中的

    2024年02月04日
    浏览(32)
  • vue+axios——创建多个实例共用请求拦截器和响应拦截器(403错误信息不提示bug解决)——基础积累

    创建多个实例共用请求拦截器和响应拦截器:使用的是函数的继承,也就是 call() 方法,这个方法第一个参数就是 this ,后面的参数可以是一个也可以是多个。最后一定要记得要 return 出去,否则接口是拿不到数据的。 上面两个文件合并后的处理如下: 在 main.js 中添加如下内容

    2024年02月10日
    浏览(39)
  • axios和vite在本地开发环境配置代理的两种方式,五分钟学会

    如果你使用vue或者react开发,就得使用axios吧,然后为了解决跨域问题,就得使用vite配置吧,那怎么协调配置它们两个才能正常工作呢? 正常的流程:配置axios的baseURL,然后配置vite的proxy 配置axios的baseURL: 然后再配置vite的proxy:在vite.config.js中配置 如果你想将路径重写也是

    2024年02月04日
    浏览(28)
  • 关于windows自带的两种远程访问方式

    实验环境:两台非家庭版的windows系统(我使用的win7和xp系统),在同一网段下 关于windows的两种远程访问方式:         1、将普通用户添加到远程桌面服务组(Remote Desktop Users组,该组账户专门用于为远程访问提供服务)         2、 telnet为用户提供命令行远程访问权限 使

    2024年02月07日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包