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

yizhihongxing

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日

相关文章

  • vue-cli3项目打包后自动化部署到服务器的方法

    今天我来为大家讲解一下如何将Vue CLI 3.x项目打包后自动化部署到服务器上的方法。整个过程分为以下几个步骤: 使用Vue CLI 3.x打包项目 创建服务器环境 上传打包好的文件到服务器 配置Nginx服务器 下面,我们将一步一步来讲解这些步骤以及使用示例。 1. 使用Vue CLI 3.x打包项目 首先,我们需要先使用Vue CLI 3.x来打包我们…

    Vue 2023年5月28日
    00
  • Vue 中指令v-bind动态绑定及与v-for结合使用详解

    让我详细讲解一下“Vue 中指令v-bind动态绑定及与v-for结合使用详解”,包含两条示例说明。 一、Vue 中指令v-bind动态绑定 在 Vue 中,通过指令 v-bind 可以将动态表达式绑定到 HTML 属性上。 例如,我们可以通过 v-bind 将 href 属性与 url 变量绑定起来,实现动态跳转链接。代码示例如下: <templat…

    Vue 2023年5月29日
    00
  • vue中v-for 循环对象中的属性

    当你需要在Vue中使用v-for指令循环一个列表时,有时可能需要访问遍历对象中的属性。以下是一个基本的示例: <ul> <li v-for="item in items">{{ item }}</li> </ul> 在上面的示例中,我们访问了items列表中的每个元素,并将它们渲染为一个li…

    Vue 2023年5月28日
    00
  • webpack搭建vue 项目的步骤

    下面我将介绍使用webpack搭建vue项目的步骤以及相关示例说明。 步骤一:初始化项目 首先,在本地创建一个空的文件夹,打开终端,进入该文件夹目录,执行以下命令: npm init -y 这个命令将会初始化一个Node.js 项目(-y 表示跳过初始化界面)。 步骤二:安装依赖 在项目根目录下执行以下命令安装webpack和vue相关依赖: npm i w…

    Vue 2023年5月28日
    00
  • vue中如何下载文件导出保存到本地

    关于“Vue中如何下载文件导出保存到本地”的完整攻略,以下是步骤解释和代码示例: 步骤解释: 创建一个下载链接 我们可以通过创建一个 <a> 标签来实现文件下载,设置它的 href 属性指向要下载的文件路径,然后通过设置 download 属性来强制浏览器下载该文件。 通过axios请求服务器数据 使用 axios 可以轻松地向后端发送请求。比如…

    Vue 2023年5月27日
    00
  • Hbuilder配置Avalon和Vue指令提示的方法详解

    Hbuilder配置Avalon和Vue指令提示的方法详解 介绍 在Hbuilder中使用Avalon和Vue框架时,我们可能会遇到没有代码提示或者只有部分代码提示的问题,这会给我们的开发带来不便和困扰。本文将会详细介绍如何配置Hbuilder实现Avalon和Vue的完整代码提示。 配置步骤 安装插件 首先,在Hbuilder的插件市场中下载安装Vue和A…

    Vue 2023年5月28日
    00
  • vue 中this.$set 动态绑定数据的案例讲解

    下面我将详细讲解“vue 中this.$set 动态绑定数据的案例讲解”的攻略。 什么是 this.$set 在 Vue 的数据绑定中,如果数据中的某个属性值是对象或数组,并且需要动态修改其中的某个属性,而且这个属性还需要双向绑定,那么 Vue 提供的双向绑定语法可能会失效。这时,就需要使用 this.$set 来动态绑定数据。 this.$set 是 Vu…

    Vue 2023年5月28日
    00
  • vue mounted组件的使用

    下面是关于“vue mounted组件的使用”的完整攻略。 什么是mounted? 在Vue组件的生命周期中,mounted是一个非常重要的生命周期钩子函数。当组件被挂载到DOM中后,mounted函数会被调用,表示组件已经完全被加载到页面上,并且模板中的所有DOM元素已经生成。 使用方法 使用mounted非常简单,只需要在Vue组件的选项中添加一个mou…

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