axios封装,使用拦截器统一处理接口,超详细的教程(推荐)

axios封装,使用拦截器统一处理接口,超详细的教程

为什么需要封装、使用拦截器统一处理接口?

在实际开发中,我们经常会使用到Ajax技术,而Axios是一个比较好用的Ajax库。但是,使用 Axios 发送请求的时候,我们遇到的一些问题:

  1. 大量重复代码:每次请求都要写一堆重复的代码,如设置 headers,处理错误等。
  2. 统一处理后端返回的数据:由于每个接口返回的数据格式不同,我们需要在每个接口里单独处理这些数据格式,非常麻烦。
  3. 统一处理请求错误:如果每个接口都单独处理请求错误,那么就会出现很多重复代码。如果统一处理,则会减少代码重复。

因此,我们需要对 Axios 进行封装,并使用拦截器来解决上述问题。

Axios 封装

  1. 安装 Axios:

npm install axios --save

  1. 创建一个 Axios 实例

```javascript
import axios from 'axios'

const instance = axios.create({
baseURL: 'http://localhost:3000', //设置请求的基本URL
timeout: 1000, // 设置超时时间
withCredentials: true // 跨域请求时是否需要携带 cookie
})
```

  1. 创建一个 http.js 文件,并导出封装好的 Axios 实例

```javascript
import axios from 'axios'

const instance = axios.create({
baseURL: 'http://localhost:3000', //设置请求的基本URL
timeout: 1000, // 设置超时时间
withCredentials: true // 跨域请求时是否需要携带 cookie
})

// 添加请求拦截器
instance.interceptors.request.use(
config => {
// 在发送请求前做些什么,如添加 token
config.headers.Authorization = getToken()
return config
},
error => {
// 对请求错误做些什么
return Promise.reject(error)
}
)

// 添加响应拦截器
instance.interceptors.response.use(
response => {
// 对响应数据做点什么
return response.data
},
error => {
// 对响应错误做点什么
return Promise.reject(error)
}
)

// 导出 http 实例
export default instance
```

  1. 在项目中使用

```javascript
import http from './http'

http.get('/user').then(res => {
console.log(res)
})

http.post('/login', { username: 'admin', password: '123456' }).then(res => {
console.log(res)
})
```

这里我们使用了 getpost 两种请求方式,但实际上 Axios 还支持其他请求方式。

示例一:统一处理 HTTP 错误码

在项目中,我们可能会遇到 HTTP 错误码不为 200 的情况,通常情况下这些错误应该被拦截并提示给用户。

我们可以通过在响应拦截器中进行判断,如果 HTTP 状态码不为 200,就弹出错误提示框。

// http.js

import axios from 'axios'
import { Message } from 'element-ui'

const instance = axios.create({
  baseURL: 'http://localhost:3000',
  timeout: 1000,
  withCredentials: true
})

// 请求拦截器
instance.interceptors.request.use(
  config => {
    // 在发送请求前做些什么
    return config
  },
  error => {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 响应拦截器
instance.interceptors.response.use(
  response => {
    // 对响应数据做点什么
    if (response.status !== 200) {
      // 判断HTTP状态码是否为200,如果不是则提示错误消息
      Message.error('请求失败,请联系管理员')
      return Promise.reject(response.data)
    } else {
      return response.data
    }
  },
  error => {
    // 对响应错误做点什么
    return Promise.reject(error)
  }
)

export default instance

示例二:在请求头中添加 Token

在前后端分离的项目中,通常需要使用 Token 权限验证,而 Token 又是存储在前端本地的,因此我们需要在发送每个请求前将 Token 添加到请求头中。

// http.js

import axios from 'axios'

const instance = axios.create({
  baseURL: 'http://localhost:3000',
  timeout: 1000,
  withCredentials: true
})

// 请求拦截器
instance.interceptors.request.use(
  config => {
    // 在发送请求前做些什么
    const token = getToken()
    if (token) {
      config.headers.Authorization = token
    }
    return config
  },
  error => {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 响应拦截器
instance.interceptors.response.use(
  response => {
    // 对响应数据做点什么
    return response.data
  },
  error => {
    // 对响应错误做点什么
    return Promise.reject(error)
  }
)

export default instance

这样,每次发送请求都会把 Token 添加到请求头中,而 Token 的获取则可以根据项目需求自行实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:axios封装,使用拦截器统一处理接口,超详细的教程(推荐) - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • uniapp自定义弹框的方法

    下面我将详细讲解uniapp自定义弹框的方法。 1. 弹框组件编写 在uniapp项目中,我们可以自定义一个弹框组件,以实现自定义弹框的效果。首先,在components目录下创建一个名为customDialog的组件文件夹,然后将该组件注册到全局: // 在main.js中注册 import customDialog from ‘@/components/…

    Vue 2023年5月28日
    00
  • Vue数据更新但页面没有更新的多种情况问题及解决

    问题描述: 在使用Vue时,我们发现有些时候,数据更新了,但页面并没有及时更新,这是一个非常常见的问题。 解决方案: 异步更新问题 当我们使用Vue异步更新数据时,如果不使用vm.$nextTick(),数据更新之后页面并不会立刻进行更新。 例如,在下面这个例子中,我们在点击按钮之后更新了msg的值,但是页面上的内容并没有更新。 <template&g…

    Vue 2023年5月27日
    00
  • Vue学习笔记进阶篇之函数化组件解析

    Vue学习笔记进阶篇之函数化组件解析,主要涉及Vue中的函数化组件,对于Vue的一些高级使用场景有很大的帮助作用。在本篇攻略中,我将为大家详细介绍函数化组件的概念、特点以及使用方法,并且会给出一些实际的使用示例。 什么是函数化组件 函数化组件,简称函数组件,是Vue中一种新的组件书写方式。与传统的Vue组件相比,函数组件去掉了<template>…

    Vue 2023年5月27日
    00
  • Vue中使用jsencrypt进行RSA非对称加密的操作方法

    下面是关于“Vue中使用jsencrypt进行RSA非对称加密的操作方法”的攻略。 什么是RSA加密算法 RSA是当前最广泛使用的公钥加密算法之一,它是以三位数学家Rivest、Shamir、Adleman的名字命名的,RSA算法使用一对相互匹配的公钥和私钥进行加密和解密,其中公钥可以公开,私钥由用户自己保管。 如何使用jsencrypt进行RSA非对称加密…

    Vue 2023年5月27日
    00
  • 五分钟教你使用vue-cli3创建项目(新手入门)

    下面我将为您详细讲解“五分钟教你使用vue-cli3创建项目(新手入门)”的完整攻略。 简介 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,可用于快速搭建项目。Vue CLI3 是 Vue CLI 的升级版本,提供了更友好、更强大、更快捷的项目脚手架。 环境准备 在使用 Vue CLI3 创建项目之前,您需要先确保安装了 Node.js …

    Vue 2023年5月29日
    00
  • vue的安装及element组件的安装方法

    下面是“vue的安装及element组件的安装方法”的完整攻略。 Vue的安装方法 1. 使用CDN加载Vue 在HTML文件中使用CDN方式加载Vue,只需要在中添加以下代码即可。 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script&g…

    Vue 2023年5月28日
    00
  • laravel 解决Validator使用中出现的问题

    下面我来给您详细讲解“laravel 解决Validator使用中出现的问题”的完整攻略。 1. Validator 概述 Laravel 的 Validator 是一个非常实用的功能,用于验证用户提交的数据是否符合规范。使用 Validator 可以快速轻松地实现表单验证和数据验证功能。但是在使用 Validator 的过程中,可能会遇到一些问题,本篇攻略…

    Vue 2023年5月28日
    00
  • vue cli4.0 如何配置环境变量

    下面是针对“vue cli4.0 如何配置环境变量”的完整攻略。 1. 环境变量的概念 首先,我们需要了解什么是环境变量。在操作系统中,环境变量是一种特殊的变量,它们储存在操作系统中,是一个动态的对象,其值可在不同的时间更改。它们通常被用于存储常量、配置信息等需要在整个操作系统中应用的数据。 2. 环境变量在vue cli4.0中的作用 在vue项目中,我们…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部