axios拦截器,如何批量处理请求响应

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

axios特性

  • 从浏览器创建 XMLHttpRequests
  • 从 node.js 创建 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求和响应数据
  • 取消请求
  • 自动转换JSON数据
  • 客户端支持防御XSRF

axios拦截器

在请求或响应被 then 或 catch 处理前拦截它们。

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    return config;
  }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  });

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    return response;
  }, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
  });

具体实现

新建request.js,写入以下内容:

import axios from 'axios';
import qs from 'qs';
//操作正常code,支持String、Array、int多种类型
const successCode = [200, 1];
//登录失效code
const invalidCode = -1;
//无权限code
const noPermissionCode = 401;
// 请求超时时间(毫秒)
const timeout = 2000;
// 基础url地址
const baseURL = '/api'
/**
 *
 * @description 处理code异常
 * @param {*} code
 * @param {*} msg
 */
const handleCode = (code, msg) => {
  switch (code) {
    // 掉线
    case invalidCode:
      alert('您已掉线,或者访问权限出错,请重新登录!');
      break;
    // 无权限
    case noPermissionCode:
      router.push({ path: '/401' }).catch(() => { });
      break;
    // 其他情况
    default:
      alert(msg || `后端接口${code}异常`);
      break;
  }
};


// 创建axios实例
const instance = axios.create({
  // `baseURL` 将自动加在 `url` 前面,除非 `url` 是一个绝对 URL。
  // 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL
  baseURL,
  // 指定请求超时的毫秒数
  timeout,
  // 自定义请求头
  headers: {
    'Content-Type': 'application/json;charset=UTF-8',
  }
});


// 请求前拦截
instance.interceptors.request.use(
  (config) => {
    // 如果请求头声明需要formData数据,则使用qs进行处理
    if (
      config.data &&
      config.headers['Content-Type'] === 'application/x-www-form-urlencoded;charset=UTF-8'
    )
      config.data = qs.stringify(config.data);
    // 也可以在这里对接口传递公共参数
    return config;
  },
  (error) => {
    // 抛出错误
    return Promise.reject(error);
  }
);
// 响应拦截
instance.interceptors.response.use(
  (response) => {
    const res = response.data;
    const { data } = response;
    const { code, msg } = data;

    // 操作成功
    // 此处根据请求返回修改,成功code
    if (successCode.indexOf(code) !== -1) {
      return res;
    } else {
      // 请求失败
      // 校验失败code,处理场景
      handleCode(code, msg);
      return Promise.reject();
    }
  },
  (error) => {
    const { response, message } = error;
    // 如果返回有data,校验失败code
    if (error.response && error.response.data) {
      const { status, data } = response;
      handleCode(status, data.msg || message);
      return Promise.reject(error);
    } else {
      // 提示其他异常
      let { message } = error;
      if (message === 'Network Error') {
        message = '后端接口连接异常';
      }
      if (message.includes('timeout')) {
        message = '后端接口请求超时';
      }
      if (message.includes('Request failed with status code')) {
        const code = message.substr(message.length - 3);
        message = '后端接口' + code + '异常';
      }
      ElMessage.error(message || `后端接口未知异常`);
      return Promise.reject(error);
    }
  }
);

export default instance;

在需要使用的页面进行调用

import request from '@/utils/request.js';
request({
  url: '/login', // /api/login
  method: 'post',
  data: {
    account: 'admin',
    password: '123456'
  },
}).then(res => {
  // 处理逻辑
  console.log(res);
});

进一步分离封装

上一步咱们将axios拦截器进行了封装,一般项目工程化会将所有的接口封装到一个js中

下面是封装了几个跟用户信息相关的接口:文章来源地址https://www.toymoban.com/news/detail-644324.html

import request from '@/utils/request.js';
export const login = async (data) => {
  return request({
    url: '/login',
    method: 'post',
    data,
  });
};

export const getUserInfo = (accessToken) => {
  return request({
    url: '/userInfo',
    method: 'get',
    data: {
      tokenName: accessToken,
    },
  });
};

export const logout = () => {
  return request({
    url: '/logout',
    method: 'post',
  });
};

export const register = async () => {
  return request({
    url: '/register',
    method: 'post',
  });
};

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

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

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

相关文章

  • Vue3 axios响应拦截器处理接口返回401未登录跳转登录页

    问题: 在 asiox 使用 useRouter 实例化创建 router 路由对象,在 response 响应拦截器里为 undefined 访问不到 使用 window.location.href = \\\'/login\\\' 跳转登录页, 本地可以正常跳转,测试环境页面会显示 not found 404, 测试环境访问地址大概是这样 ip:8080/pm/#/login , 本地没有 /pm 解决方案: 在 mai

    2024年01月21日
    浏览(47)
  • VUE3 请求拦截器 响应拦截器

    1,导入axios  (使用axios进行接口的请求,页面发送http请求,很多情况我们要对请求和其响应进行特定的处理,如:判断token,设置请求头。如果请求数非常多,单独对每一个请求进行处理会变得非常麻烦,程序的优雅性也会大打折扣。所以axios为开发者提供了这样一个API:拦

    2024年02月16日
    浏览(49)
  • 【前端知识】Axios——请求拦截器模板

    Axios是一个基于Promise的HTTP客户端,用于发送HTTP请求。它可以在浏览器和Node.js环境中使用,并且提供了许多强大的功能,例如拦截请求和响应、转换请求和响应数据、取消请求等。 Axios具有简单易用的API,可以轻松地发送GET、POST、PUT、DELETE等各种类型的请求。它还支持异步操

    2024年02月09日
    浏览(48)
  • 微信小程序封装request请求,包含请求拦截器,响应拦截器和请求重试功能

    在发送请求之前,先判断用户是否有token,没有就执行登陆请求,将token保存,然后再执行原来请求; 拥有token,就直接执行请求;但是用户的这个token可能是过期的,如果执行请求发现用户登陆过期,就统一返回40001,然后对40001的响应统一处理,执行登陆请求,再执行原来请

    2024年02月13日
    浏览(50)
  • axios拦截器:每次请求自动带上 token

    Step 1:创建Axios实例并添加拦截器 在你的Vue项目中,一般我们会先导入axios,然后创建一个axios实例。这样做是为了方便统一管理和配置。 上面的代码做了什么呢? 1. 我们创建了一个axios实例service,相当于有了一个专属邮差。 2. 给这个邮差设置了规则:每次出门送信前,先检

    2024年04月09日
    浏览(55)
  • 【axios网络请求库】认识Axios库;axios发送请求、创建实例、创建拦截器、封装请求

    功能特点: 在浏览器中发送 XMLHttpRequests 请求 在 node.js 中发送 http请求 支持 Promise API 拦截请求和响应 转换请求和响应数据 支持多种请求方式: axios(config) axios.request(config) axios.get(url[, config]) axios.delete(url[, config]) axios.head(url[, config]) axios.post(url[, data[, config]]) axios.put(url[, data[, c

    2024年02月10日
    浏览(43)
  • Feign请求及响应拦截器

    feign请求拦截,处理head、param、body参数,附加解密定制化处理,也可以使用原生解码器; feign响应拦截,处理head、param、body参数,附加解密定制化处理,也可以使用原生解码器; 附件加解密工具(支持格式化rn、rt)等格式化代码加解密,五年验证品质保证

    2024年02月11日
    浏览(47)
  • Vue3 网络请求——axios 高级用法之 axios 拦截器实战与并发请求

    Axios 是一个流行的基于 Promise 的 HTTP 客户端库,用于在浏览器和 Node.js 中发出 HTTP 请求。 Axios 还支持请求和响应的拦截器。接下来通过这篇文章,我们一起来学习和了解一下 Axios 拦截器和并发请求,通过实际代码来介绍如何使用 Axios 拦截器。 拦截器会在发生响应请求之前和

    2024年02月10日
    浏览(44)
  • Axios基本使用,为学习后续的Vue服务【发送请求+并发请求+前端拦截器】

    目录 1、项目中引入Axios 2、使用Axios发送请求 2.1、例:发送GET请求 2.2、例:发送POST请求 3、axios并发请求 4、拦截器 注:个人学习笔记,因自己学过后端,所以有关后端的代码,我在这里就不展示了~ 不了解后端的宝子,也不会耽误学习,因为公司里会有写好的接口文档,直

    2024年02月02日
    浏览(53)
  • SpringMVC简介、请求与响应、REST风格、SSM整合、拦截器

    目录 SpringMVC简介 SpringMVC概述 入门案例 入门案例工作流程分析 Controller加载控制 PostMan 请求与响应 设置请求映射路径 五种类型参数传递 JSON数据传输参数  JSON对象数据 JSON对象数组 日期类型参数传递  响应  REST风格 REST风格简介 RESTful入门案例 RESTful快速开发 RESTful案例 SSM整

    2024年02月05日
    浏览(68)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包