首页 > 其他分享 >vue全家桶进阶之路47:Vue3 Axios拦截器封装成request文件

vue全家桶进阶之路47:Vue3 Axios拦截器封装成request文件

时间:2023-04-21 09:00:47浏览次数:46  
标签:function 拦截器 进阶 request 响应 vue error response

可以将Axios拦截器封装成一个单独的request文件,以便在整个应用程序中重复使用。

以下是一个示例,展示如何将Axios拦截器封装成一个request文件:

1、创建一个名为request.js的新文件,并导入Axios:

import axios from 'axios';

2、创建一个名为request的函数,并将其导出:

这将创建一个名为request的函数,并将其设置为具有基本URL的新的Axios实例。要在封装的Axios实例中添加超时设置,可以在创建Axios实例时传递timeout选项。

export const request = axios.create({
  baseURL: 'https://example.com/api',
  timeout: 5000, // 超时设置为5秒
});

3、在request函数中添加拦截器:

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

request.interceptors.response.use(function (response) {
  // 对响应数据做点什么
  return response;
}, function (error) {
  // 对响应错误做点什么
  return Promise.reject(error);
});

这将添加一个请求拦截器和一个响应拦截器。可以在这些拦截器中执行需要的操作,例如在请求发送之前添加身份验证标头或在响应返回后检查响应数据是否有误。

4、最后,导出request函数:

export default request;

5、现在可以在应用程序中使用request函数来执行网络请求,并且每个请求都将经过预定义的拦截器。例如:

import request from './request';

request.get('/users')
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

这将使用封装的Axios实例发出GET请求,然后使用预定义的拦截器处理响应

 

 

完整示例:

要在发送请求之前携带Token和Username,可以使用请求拦截器来为所有请求添加身份验证标头,

请求拦截器检查localStorage中是否存在名为“token”和“username”的值,并将其添加为Authorization和Username标头。根据实际情况调整这些标头的名称和值。

要对响应数据进行操作,使用响应拦截器。在上面的示例中,响应拦截器检查响应数据中的“status”属性是否为“success”。如果不是,则将其视为错误,并将其作为异常抛出。异常包含响应对象,其中包含所有响应信息,例如响应头、状态码和响应体。可以根据实际情况调整这些检查和异常抛出的逻辑。

import axios from 'axios';

export const request = axios.create({
  baseURL: 'https://example.com/api',
  timeout: 5000, // 超时设置为5秒
});

request.interceptors.request.use(function (config) {
  // 在发送请求之前添加身份验证标头
  config.headers.Authorization = `Bearer ${localStorage.getItem('token')}`;
  config.headers.Username = localStorage.getItem('username');
  return config;
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error);
});


request.interceptors.response.use(function (response) {
  // 对响应数据做些什么
  const responseData = response.data;
  if (responseData.status !== 'success') {
    const error = new Error(responseData.message || '请求失败');
    error.response = response;
    throw error;
  }
  return responseData.data;
}, function (error) {
  // 对响应错误做些什么
  return Promise.reject(error);
});

 

标签:function,拦截器,进阶,request,响应,vue,error,response
From: https://www.cnblogs.com/beichengshiqiao/p/17339110.html

相关文章

  • 【进阶15】【自学笔记】Python运行cmd命令的几种方式
    一、pathlib的简单介绍pathlib是Python3.4及更高版本中内置的标准库,提供了一种面向对象的方式来处理文件系统路径。它为不同操作系统提供了合适的路径语义,并支持常见的文件和目录操作,比如判断路径是否存在、获取路径的各个部分、创建/删除目录等操作。二、基本操作1、获取......
  • 【进阶14】【自学笔记】Python运行cmd命令的几种方式
    1、使用os.system()函数importos#运行cmd命令os.system('dir')2、使用subprocess模块importsubprocess#运行cmd命令subprocess.run(['dir'],shell=True)3、使用os.popen()函数importos#运行cmd命令result=os.popen('dir')print(result.read......
  • vue中的ref 和 reactive--今天学了啥 23/3/12
     这两者都是默认deepreactive,不同的是reactive使用es6的proxy,只能使对象reactive。ref不仅支持对象还支持基本数组,不能说ref是reactive的超集,因为这两者返回的类型就不一样。 Reftype:functionref<T>(value:T):Ref<UnwrapRef<T>>interfaceRef<T>{value:T}如......
  • 关于vue3中Scope slot实战中使用
    今天学了啥-23/03/28 vue提供slot机制让组件可以接收模板片段,来渲染模板片段。比如最常见的button组件,基本是如下这样使用。<FancyButton>Clickme!<!--插槽内容--></FancyButton>FancyButton组件则是这样:<buttonclass="fancy-btn"><slot></slot><!--插......
  • vue全家桶进阶之路46:Vue3 Axios拦截器和globalProperties全局设置
    在Vue.js3中,使用Axios与Vue.js2.x中类似,但是需要进行一些修改和更新,下面是Vue.js3中Axios的定义和使用方式:首先,你需要安装Axios和Vue.js3.x,可以使用npm或yarn等包管理工具安装:npminstallaxiosvue@next然后,在你的Vue.js3应用程序中,你可以使用以下代码来导入和使用Axio......
  • Vue3 日历组件的实现
    Vue3日历组件的实现以下是一个基于Vue3实现的简单日历组件的代码示例。这个日历组件包含了前一个月、当前月、下一个月的日期,并且可以支持选择日期、切换月份等功能。<template><divclass="calendar"><divclass="header"><buttonclass="prev"@click="pre......
  • Day 26 26.1 JS进阶之JS对象
    JS进阶之JS对象【一】、字符串对象字符串创建(两种方式)变量=“字符串”字串对象名称=newString(字符串)varstr1="helloworld";//推荐varstr1=newString("helloword");//字符串对象的操作varstr="hello";//这就是字符串对象console.log(str);//......
  • Vue3 watch 监听对象数组中对象的特定属性
    Vue3watch监听对象数组中对象的特定属性在Vue3中,可以使用watch函数来监听对象数组中对象的特定属性。可以通过在回调函数中遍历数组来检查对象的特定属性是否发生变化,并在变化发生时执行相应的操作。一、监听对象的特定属性例如,假设有一个名为items的对象数组,其中每个......
  • 《算法竞赛进阶指南》 第五章 237. 程序自动分析
    地址https://www.acwing.com/problem/content/239/在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足。考虑一个约束满足问题的简化版本:假设x1,x2,x3,…代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变量相等/不等的约束条件,请判定是否可以分......
  • CentOS7 云服务器搭建及部署SpringBoot+vue项目
    CentOS7云服务器搭建及部署SpringBoot+vue项目1)云服务器配置以及环境搭建1.1JDK安装卸载现有环境(有则卸载)使用rpm命令查询相关java套件rpm-qa|grepjava如果存在,通过命令删除对应版本的JDKrpm-e--nodepsjava-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64rpm-e......