当前位置:   article > 正文

axios全局和请求拦截器封装(单独拦截器)_axios全局拦截器

axios全局拦截器

目录

主要代码已打注释,总代码包含全局和单独请求拦截器。封装报错解释可参考其他文章

axios全局拦截器:

 单独拦截器:

总代码: 


主要代码已打注释,总代码包含全局和单独请求拦截器。封装报错解释可参考其他文章
axios全局拦截器

request/index

  1. import axios from 'axios'
  2. import type { AxiosInstance, AxiosRequestConfig } from 'axios'
  3. import type { HYRequestInterceptors, HYRequestConfig } from './type'
  4. class HYRequest {
  5. instance: AxiosInstance
  6. interceptors?: HYRequestInterceptors
  7. constructor(config: HYRequestConfig) {
  8. this.instance = axios.create(config)
  9. this.interceptors = config.interceptors
  10. // 从config中取出的拦截器是对应的实例的拦截器
  11. this.instance.interceptors.request.use(
  12. this.interceptors?.requestInterceptor,
  13. this.interceptors?.requestInterceptorCatch
  14. )
  15. this.instance.interceptors.response.use(
  16. this.interceptors?.responseInterceptor,
  17. this.interceptors?.responseInterceptorCatch
  18. )
  19. // 添加所有的实例都有的拦截器
  20. this.instance.interceptors.request.use(
  21. (config) => {
  22. console.log('所有实例都有的拦截器:请求拦截成功')
  23. return config
  24. },
  25. (err) => {
  26. console.log('所有实例都有的拦截器:请求拦截失败')
  27. return err
  28. }
  29. )
  30. this.instance.interceptors.response.use(
  31. (res) => {
  32. console.log('所有实例都有的拦截器:响应成功拦截')
  33. return res
  34. },
  35. (err) => {
  36. console.log('所有实例都有的拦截器:响应失败拦截')
  37. return err
  38. }
  39. )
  40. }
  41. request(config: AxiosRequestConfig) {
  42. this.instance.request(config).then((res) => {
  43. console.log(res)
  44. })
  45. }
  46. }
  47. export default HYRequest

request/type

  1. import {
  2. InternalAxiosRequestConfig,
  3. AxiosResponse,
  4. AxiosRequestConfig
  5. } from 'axios'
  6. export interface HYRequestInterceptors {
  7. requestInterceptor?: (
  8. config: InternalAxiosRequestConfig
  9. ) => InternalAxiosRequestConfig
  10. requestInterceptorCatch?: (error: any) => any
  11. responseInterceptor?: (res: AxiosResponse) => AxiosResponse
  12. responseInterceptorCatch?: (error: any) => any
  13. }
  14. export interface HYRequestConfig extends AxiosRequestConfig {
  15. interceptors?: HYRequestInterceptors
  16. }
 单独拦截器:

刚开始因为InternalAxiosRequestConfigAxiosRequestConfig类型请求头不匹配。在传输时添加一个匹配的头就可以了

总代码: 
  1. import axios from 'axios'
  2. import type { AxiosInstance } from 'axios'
  3. import type { HYRequestInterceptors, HYRequestConfig } from './type'
  4. class HYRequest {
  5. instance: AxiosInstance
  6. interceptors?: HYRequestInterceptors
  7. constructor(config: HYRequestConfig) {
  8. this.instance = axios.create(config)
  9. this.interceptors = config.interceptors
  10. // 从config中取出的拦截器是对应的实例的拦截器
  11. this.instance.interceptors.request.use(
  12. this.interceptors?.requestInterceptor,
  13. this.interceptors?.requestInterceptorCatch
  14. )
  15. this.instance.interceptors.response.use(
  16. this.interceptors?.responseInterceptor,
  17. this.interceptors?.responseInterceptorCatch
  18. )
  19. // 添加所有的实例都有的拦截器
  20. this.instance.interceptors.request.use(
  21. (config) => {
  22. console.log('所有实例都有的拦截器:请求拦截成功')
  23. return config
  24. },
  25. (err) => {
  26. console.log('所有实例都有的拦截器:请求拦截失败')
  27. return err
  28. }
  29. )
  30. this.instance.interceptors.response.use(
  31. (res) => {
  32. console.log('所有实例都有的拦截器:响应成功拦截')
  33. return res
  34. },
  35. (err) => {
  36. console.log('所有实例都有的拦截器:响应失败拦截')
  37. return err
  38. }
  39. )
  40. }
  41. request(config: HYRequestConfig) {
  42. if (config.interceptors?.requestInterceptor) {
  43. config = config.interceptors.requestInterceptor(config)
  44. }
  45. this.instance.request(config).then((res) => {
  46. if (config.interceptors?.responseInterceptor) {
  47. res = config.interceptors.responseInterceptor(res)
  48. }
  49. console.log(res)
  50. })
  51. }
  52. }
  53. export default HYRequest

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/299751
推荐阅读
相关标签
  

闽ICP备14008679号