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日

相关文章

  • Vue之文件加载执行全流程

    当浏览器加载Vue文件时,需要经过文件加载、解释和执行的过程,以下是Vue之文件加载执行全流程的攻略: 文件加载 首先,浏览器会从服务器端请求Vue文件。如果该Vue文件在浏览器缓存中已经存在,则浏览器直接从缓存中读取该文件,否则,浏览器会向服务器端请求该文件。 当Web服务器收到浏览器的Vue文件请求后,会将该文件返回给浏览器。浏览器接收到Vue文件后,会…

    Vue 2023年5月27日
    00
  • Vue实战之掌握自定义指令

    下面是Vue实战之掌握自定义指令的完整攻略: 1. 自定义指令的作用及使用场景 自定义指令是Vue中一个非常重要的功能,它可以让我们自定义DOM操作行为,比如让元素获取焦点、滚动到指定位置、自动聚焦等。自定义指令的使用场景非常广泛,比如: 在表单中监听输入框焦点事件,根据输入框的类型来动态切换键盘类型; 在移动端页面中使用Better-Scroll滚动插件时…

    Vue 2023年5月27日
    00
  • 如何正确理解vue中的key详解

    下面我将为大家详细讲解关于“如何正确理解Vue中的key”的攻略。 什么是key? 在Vue中,每个节点都需要有唯一的key属性,用于辅助Vue渲染虚拟DOM和更新真实DOM。 key的作用 提高Vue性能:在更新虚拟DOM时,Vue会基于key的变化来判断节点的位置以及是否需要重新渲染。有了key,在更新虚拟DOM时,Vue就可以精准地判断出新旧节点是否相…

    Vue 2023年5月29日
    00
  • 详解Jest结合Vue-test-utils使用的初步实践

    下面我会详细讲解“详解Jest结合Vue-test-utils使用的初步实践”的完整攻略,并提供两个示例说明。 详解Jest结合Vue-test-utils使用的初步实践 简介 Jest是一个由Facebook开发的JavaScript测试框架,可以帮助我们编写高质量、可维护性强、易于扩展的测试代码。Vue-test-utils是一个用于Vue.js组件测试…

    Vue 2023年5月27日
    00
  • vue常用指令代码实例总结

    Vue常用指令代码实例总结攻略 什么是Vue指令 Vue指令是一种特殊的HTML属性, 它们以v-前缀开头,用于渲染模板。指令中可以包含绑定表达式,该表达式的值被动态计算,并且可以自动响应数据变化。 Vue指令有很多种,下面我们来详细讲解一些常用指令的代码实例。 v-if指令 v-if 指令用于根据表达式的值来有条件地渲染某个元素,如果表达式的值为false…

    Vue 2023年5月27日
    00
  • Vue3 PC端页面开发规范及说明

    Vue3 PC端页面开发规范及说明 1. 项目结构 在Vue3项目中,按照以下目录结构组织项目,便于代码管理和维护: project-name/ ├── public/ │ ├── index.html │ └── … ├── src/ │ ├── assets/ // 存放图片、字体等静态资源 │ ├── components/ // 公共组件 │ ├…

    Vue 2023年5月27日
    00
  • vue之webpack -v报错解决方案总结

    下面是“vue之webpack -v报错解决方案总结”的完整攻略。 问题描述 在使用Vue CLI创建项目或运行已有项目时,可能会出现以下错误提示: sh: webpack: command not found 这个错误提示表示无法找到webpack命令,这将导致无法完成项目的构建和打包。 解决方案 方案一:全局安装webpack 可以尝试全局安装最新版本的…

    Vue 2023年5月28日
    00
  • vue 获取视频时长的实例代码

    获取视频时长是一个常见的需求,Vue 作为一个流行的前端框架,提供了一些方便的方式来完成这个任务。本文将介绍如何使用 Vue 获取视频时长的实例代码和操作步骤。 步骤一:设置 HTML5 video 元素 首先,我们需要在页面上添加一个 HTML5 video 标签,用于加载视频。下面是一个简单的示例: <template> <video …

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