vue开发中关于axios的封装过程

关于vue开发中关于axios的封装过程,以下是完整攻略:

1.为什么要进行axios的封装

vue中使用axios进行网络请求是很方便的,但是我们可能需要定制自己的请求拦截/响应拦截器、设置默认请求头等等,这时候就需要进行axios的封装,便于在多个组件中复用。

2.封装axios的步骤

2.1 安装axios依赖

首先我们需要在项目中安装axios依赖,使用命令:

npm install axios

2.2 创建api目录,用于存放封装的axios请求方法

在src目录下创建api目录(也可以根据个人喜好定制目录结构),用于存放封装的ajax请求方法。在api目录下创建index.js,用于定义所有请求的方法,代码示例:

import axios from 'axios'
import { Message } from 'element-ui' // 引入饿了么UI的消息提示

// 创建axios实例
const instance = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // API的基础路径
  timeout: 5000 // 超时时间
})

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

// 配置响应拦截器
instance.interceptors.response.use(
  response => {
    // 对响应数据做点什么
    return response.data
  },
  error => {
    // 对响应错误做些什么
    Message({
      message: error.message,
      type: 'error',
      duration: 5 * 1000
    })
    return Promise.reject(error)
  }
)

// 封装get请求
export function get(url, params) {
  return instance.get(url, {
    params
  })
}

// 封装post请求
export function post(url, data) {
  return instance.post(url, data)
}

在此示例中,我们创建了一个instance实例,用于进行axios操作,同时配置了请求拦截器和响应拦截器。实现了get与post请求的封装,并将其导出模块。

通过配置请求拦截器,我们可以在发送请求前进行一些处理,比如添加请求头、请求参数统一处理等等。

通过配置响应拦截器,我们可以对响应结果进行一些处理,比如统一处理错误信息、处理业务状态码等等。

2.3 在组件中引入要用到的请求方法

在组件中引入刚才定义的请求方法,即可进行网络请求。例如:

import { get, post } from '@/api'

// 调用get请求方法
get('/api/user/123', { name: '张三' })
  .then(res => {
    console.log(res)
  })

// 调用post请求方法
post('/api/user', { name: '李四', age: 18 })
  .then(res => {
    console.log(res)
  })

3.示例

下面是在vue开发中关于axios的封装过程的示例说明。

3.1 示例一

// api/index.js

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

const instance = axios.create({
  baseURL: process.env.VUE_APP_BASE_API,
  timeout: 5000
})

instance.interceptors.request.use(
  config => {
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = token
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

instance.interceptors.response.use(
  response => {
    return response.data
  },
  error => {
    Message({
      message: error.message,
      type: 'error',
      duration: 5 * 1000
    })
    return Promise.reject(error)
  }
)

export function get(url, params) {
  return instance.get(url, {
    params
  })
}

export function post(url, data) {
  return instance.post(url, data)
}

点击查看完整的示例代码:https://github.com/PanJiaChen/vue-element-admin/blob/master/src/api/index.js

3.2 示例二

// api/index.js

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

const instance = axios.create({
  baseURL: process.env.VUE_APP_BASE_API,
  timeout: 5000
})

instance.interceptors.request.use(
  config => {
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = token
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

instance.interceptors.response.use(
  response => {
    if (response.data.code !== 200) {
      Message({
        message: response.data.message,
        type: 'error',
        duration: 5 * 1000
      })
      return Promise.reject(response.data.message)
    }
    return response.data
  },
  error => {
    Message({
      message: error.message,
      type: 'error',
      duration: 5 * 1000
    })
    return Promise.reject(error)
  }
)

export function get(url, params) {
  return instance.get(url, {
    params
  })
}

export function post(url, data) {
  return instance.post(url, data)
}

在上面的示例中,在响应拦截器中判断业务状态码,如果不为200,则弹出错误提示。这样,在多个组件中,就不用重复地进行响应状态的校验。

点击查看完整的示例代码:https://github.com/PanJiaChen/vue-element-admin/blob/master/src/api/index.js

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue开发中关于axios的封装过程 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • MySQL中字段类型char、varchar和text的区别

    MySQL中字段类型char、varchar和text是常用的字符串类型,它们在存储及使用方式上有所不同。本篇攻略将详细介绍它们的区别。 char类型 char是一种定长字符串类型,其长度在创建表时定义,如果插入的字符串长度小于定义的长度,会在后面自动补空格。例如,如果一个char(10)类型的字段保存”abc”,则该字段会存储为”abc “,共10个字符,…

    other 2023年6月25日
    00
  • iOS中实现检测Zoombie对象的具体方法

    iOS中实现检测Zombie对象的具体方法 什么是Zombie对象? 在iOS开发中,Zombie对象是指已经被释放(dealloc)但仍然被访问的对象。这种情况可能会导致应用崩溃或产生难以调试的Bug。为了解决这个问题,我们可以使用Xcode提供的一些工具和技术来检测和调试Zombie对象。 使用Instruments检测Zombie对象 Instrume…

    other 2023年6月28日
    00
  • Go语言中使用urfave/cli命令行框架

    Urfave/cli是一个用于创建命令行应用程序的Go语言框架。cli框架旨在简化开发过程,使开发者能够更轻松地构建高质量的命令行应用程序。在本文中,我将提供一份使用urfave/cli命令行框架的完整攻略,包括框架的基本用法和两个示例说明。 安装 要使用urfave/cli框架,您需要先安装Go语言。在您安装并配置好Go语言环境后,您可以使用以下命令安装c…

    other 2023年6月26日
    00
  • Java中final作用于变量、参数、方法及类该如何处理

    final作用于变量 当final作用于变量时,表示该变量的值只能被赋值一次,一旦赋值不能更改。在Java中,final变量通常被用作常量或配置信息等需要被保护的不可变数据。 示例代码: public class FinalVariableExample { public static void main(String[] args) { final int…

    other 2023年6月26日
    00
  • 关于mybatis mapper类注入失败的解决方案

    关于MyBatis Mapper类注入失败的解决方案 在MyBatis中,Mapper类是Dao层的接口,通过Mapper类调用到mapper.xml的sql语句执行相关操作。如果Mapper类注入失败,会导致无法进行相关的数据库操作。下面给出解决该问题的完整攻略。 1.检查Mapper类接口所在的包路径是否正确 在Spring Boot项目中,Mapper…

    other 2023年6月26日
    00
  • Maven导入依赖时报错如何解决

    当使用Maven导入依赖时,可能会出现各种问题,比如找不到依赖、版本冲突等等。下面是一些常见的解决方法和建议: 一、检查maven配置 首先,我们应该检查我们的maven配置,确保Maven使用的是我们想要的本地仓库地址和远程仓库配置。可以在 pom.xml 文件中查看使用的本地仓库路径和远程仓库的配置信息。 另外,我们还可以通过检查 settings.xm…

    other 2023年6月27日
    00
  • 安全框架Shiro和Spring Security比较

    @ConditionalOnExpression是Spring Boot中的一个条件注解,它的作用是根据SpEL表达式的结果来决定是否创建一个Bean。下面是使用@ConditionalOnExpression的完整攻略。 使用方法 在Spring Boot应用程序中,使用@ConditionalOnExpression注解来标记一个Bean。 @Confi…

    other 2023年5月5日
    00
  • Spring Boot详解配置文件有哪些作用与细则

    Spring Boot详解配置文件有哪些作用与细则 简介 在Spring Boot应用中,配置文件是非常重要的一部分。它能够让我们配置应用的各种环境参数,以便应用能够更好地运行。Spring Boot使用属性文件和yaml文件作为配置文件格式,使得我们可以在应用中轻松地配置和管理参数。 配置文件名称 Spring Boot应用使用的默认配置文件名称是appl…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部