vue写一个axios的拦截器

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

要编写并生效Axios拦截器,可以按照以下步骤进行操作:

1.创建一个文件:在你的项目中,创建一个新的JavaScript文件,例如interceptors.js,用于编写拦截器代码。
2.导入所需的库和模块:在interceptors.js文件中,导入所需的Axios库和其他依赖项。

import axios from 'axios';

// 其他依赖项的导入

3.创建Axios实例:使用Axios库创建一个自定义的Axios实例,可以在创建实例时配置默认的请求参数。

const instance = axios.create({
  baseURL: 'https://api.example.com', // 设置基础URL
  timeout: 5000, // 设置请求超时时间
  // 其他配置参数...
});

4.添加请求拦截器:通过调用instance.interceptors.request.use()方法,添加一个请求拦截器。

// request拦截器
  instance.interceptors.request.use(config => {
    console.log("请求拦截器",config)
    // 从sessionStorage获取token
    const token = sessionStorage.getItem('usertoken');
    // 如果token存在,则在请求头中添加Authorization字段
    if (token) {
      config.headers.Authorization = token;
    }
    // get请求映射params参数
    if (config.method === 'get' && config.params) {
      let url = config.url + '?';
      for (const propName of Object.keys(config.params)) {
        const value = config.params[propName];
        var part = encodeURIComponent(propName) + "=";
        if (value !== null && typeof(value) !== "undefined") {
          if (typeof value === 'object') {
            for (const key of Object.keys(value)) {
              let params = propName + '[' + key + ']';
              var subPart = encodeURIComponent(params) + "=";
              url += subPart + encodeURIComponent(value[key]) + "&";
            }
          } else {
            url += part + encodeURIComponent(value) + "&";
          }
        }
      }
      url = url.slice(0, -1);
      config.params = {};
      config.url = url;
    }
    return config
  }, error => {
      Promise.reject(error)
  })

  // 响应拦截器
  service.interceptors.response.use(res => {
        console.log('---响应拦截器---', res);
        if (res.data.code === 0 || res.status === 401) {
          // 返回登录页面
          window.top.location.href = '/front/page/login.html';
        } else {
          return res.data;
        }
      },
    error => {
      let { message } = error;
      if (message == "Network Error") {
        message = "后端接口连接异常";
      }
      // 状态码报错属于error不是响应拦截器能够使用的
      else if (error.response && error.response.status === 401) {
        // 返回登录页面
        window.top.location.href = '/front/page/login.html';
      }
      else if (message.includes("timeout")) {
        message = "系统接口请求超时";
      }
      else if (message.includes("Request failed with status code")) {
        message = "系统接口" + message.substr(message.length - 3) + "异常";
      }
      window.vant.Notify({
        message: message,
        type: 'warning',
        duration: 5 * 1000
      })
      //window.top.location.href = '/front/page/no-wify.html'
      return Promise.reject(error)
    })

5.添加响应拦截器:通过调用instance.interceptors.response.use()方法,添加一个响应拦截器。

instance.interceptors.response.use(response => {
  // 对响应数据做些什么
  // 例如处理错误状态码、解析数据等
  return response.data;
}, error => {
  // 对响应错误做些什么
  return Promise.reject(error);
});

6.导出Axios实例:在interceptors.js文件的末尾,导出包含拦截器的Axios实例。

export default instance;

7.在需要使用拦截器的文件中导入并使用:在你的其他文件中(例如主应用程序文件或用于发起请求的地方),导入包含拦截器的Axios实例,并使用它进行网络请求。

import axiosInstance from './interceptors';

axiosInstance.get('/api/example')
  .then(response => {
    // 处理成功的响应
  })
  .catch(error => {
    // 处理错误的响应
  });

通过以上步骤,你将能够创建自定义的Axios拦截器并使其生效。你需要创建一个叫做interceptors.js的文件,其中包括创建Axios实例、添加请求和响应拦截器的代码,并将Axios实例导出。然后,在需要使用拦截器的文件中导入interceptors.js文件,并使用导入的Axios实例进行请求操作。这样,拦截器将在请求发送和响应返回时生效,并执行预定义的逻辑。

演示流程

当然!下面是一个简单的Axios拦截器的示例:
import axios from ‘axios’;

// 创建一个axios实例
const instance = axios.create({
  baseURL: 'https://api.example.com', // 设置基础URL
  timeout: 5000, // 设置请求超时时间
});

// 请求拦截器
instance.interceptors.request.use(config => {
  // 在发送请求之前做些什么
  // 例如添加认证头部信息、设置loading状态等
  console.log('请求拦截器');

  // 必须有返回config,不然请求无法发送
  return config;
}, error => {
  // 对请求错误做些什么
  console.error('请求拦截器错误', error);
  return Promise.reject(error);
});

// 响应拦截器
instance.interceptors.response.use(response => {
  // 对响应数据做些什么
  // 例如处理错误状态码、解析数据等
  console.log('响应拦截器');

  // 必须有返回response,不然无法在then里接收到响应
  return response;
}, error => {
  // 对响应错误做些什么
  console.error('响应拦截器错误', error);
  return Promise.reject(error);
});

export default instance;

以上代码创建了一个具有请求拦截器和响应拦截器的Axios实例。在请求拦截器中,可以添加一些共同的请求处理逻辑,例如添加认证头部信息或设置loading状态。在响应拦截器中,可以处理响应数据,例如解析数据或处理错误状态码。你可以根据需要,在拦截器中添加更多的逻辑和自定义处理。
你可以将以上代码保存为一个文件(例如interceptors.js),然后在需要使用Axios的地方导入该文件,例如:

import axiosInstance from './interceptors';

axiosInstance.get('/api/example')
  .then(response => {
    // 处理成功的响应
  })
  .catch(error => {
    // 处理错误的响应
  });

这样,你的Axios拦截器就会生效,并在发起请求和处理响应时执行相应的逻辑。文章来源地址https://www.toymoban.com/news/detail-528818.html

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

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

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

相关文章

  • vue全家桶进阶之路46:Vue3 Axios拦截器

    在Vue.js 3中,使用Axios与Vue.js 2.x中类似,但是需要进行一些修改和更新,下面是Vue.js 3中Axios的定义和使用方式: 首先,你需要安装Axios和Vue.js 3.x,可以使用npm或yarn等包管理工具安装: 然后,在你的Vue.js 3应用程序中,你可以使用以下代码来导入和使用Axios: 上面的代码使用

    2023年04月20日
    浏览(53)
  • Vue3 网络请求——axios 高级用法之 axios 拦截器实战与并发请求

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

    2024年02月10日
    浏览(45)
  • 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日
    浏览(46)
  • vue全家桶进阶之路46:Vue3 Axios拦截器和globalProperties全局设置

    在Vue.js 3中,使用Axios与Vue.js 2.x中类似,但是需要进行一些修改和更新,下面是Vue.js 3中Axios的定义和使用方式: 首先,你需要安装Axios和Vue.js 3.x,可以使用npm或yarn等包管理工具安装: 然后,在你的Vue.js 3应用程序中,你可以使用以下代码来导入和使用Axios: 上面的代码使用

    2023年04月20日
    浏览(51)
  • vue全家桶进阶之路47:Vue3 Axios拦截器封装成request文件

    可以将Axios拦截器封装成一个单独的request文件,以便在整个应用程序中重复使用。 以下是一个示例,展示如何将Axios拦截器封装成一个request文件: 1、创建一个名为request.js的新文件,并导入Axios: 2、创建一个名为request的函数,并将其导出: 这将创建一个名为request的函数,

    2023年04月21日
    浏览(53)
  • 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)
  • 报错 “Required request body is missing: public“ 的解决方案以及注意点(Vue, axios拦截器)

    在使用axios拦截器时,返回500,报了\\\"Required request body is missing: public\\\"的错误,我的拦截器是这么写的,参考了以下链接: http://www.45fan.com/article.php?aid=1D2dBLoGSZ31XuGv#_label1 我这里的基础地址在我本地换成了接口的域名地址。 然后在api/index.js的文件里面,这样应用的:  然后报错

    2024年02月10日
    浏览(64)
  • axios拦截器

    一般在项目中,发送http请求时会对请求和响应进行一些特定的处理:判断token,设置请求头等,如果要挨个对每个请求都做处理的话太麻烦,方便起见,axios提供了拦截器。 axios拦截器分为请求拦截器和响应拦截器: 请求拦截器 响应拦截器 也可以移除拦截器 可以自定义axi

    2024年02月11日
    浏览(43)
  • axios 请求和响应拦截器

    1. 创建实例 使用 axios.create() 使用自定义配置创建一个 axios 实例。 2. 拦截器 在请求或响应被 then 或者 catch 处理前拦截他们,拦截分为请求拦截和响应拦截。 2.1 request 拦截器,全局添加市场信息 removeMarketCode 是否移除市场信息,默认不移除; 根据上述代码可以看到,市场信

    2024年02月09日
    浏览(41)
  • axios 中使用请求响应拦截器

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

    2024年02月16日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包