vue封装axios实现

简介: axios很多前端都应该是非常熟悉了,前端访问后端很多都是使用的它,今天我们使用vue来封装一个axios。

axios很多前端都应该是非常熟悉了,前端访问后端很多都是使用的它,今天我们使用vue来封装一个axios。

首页我们新建一个request.js文件并引入axios的依赖

import axios from 'axios'

接着创建axios的实例

const service = axios.create({
   
    baseURL: '/api', 
})

然后我们定义一个常量函数,这个函数将接收四个参数:url、value、method和options。其中,url表示请求地址,value表示请求参数,method表示请求方式(默认为post),options表示请求配置(默认为空对象)。该函数的作用是向服务器发起请求,并返回一个Promise对象,该对象可以通过then方法进行后续处理。
在函数内部,首先将请求地址进行拼接,然后根据请求方式的不同,分别调用axios库中的post或get方法。如果请求方式为formdata,通过axios库中的方法进行数据转换和请求头设置,最终返回请求结果。

export const baseRequest = (url, value = {
   }, method = 'post', options = {
   }) => {
   
    url = 'http://127.0.0.1:你的端口' + url
    if (method === 'post') {
   
        return service.post(url, value, options)
    } else if (method === 'get') {
   
        return service.get(url, {
   
            params: value,
            ...options
        })
    } else if (method === 'formdata') {
   
        return service({
   
            method: 'post',
            url,
            data: value,
            // 转换数据的方法
            transformRequest: [
                function (data) {
   
                    let ret = ''
                    for (const it in data) {
   
                        ret += `${encodeURIComponent(it)}=${encodeURIComponent(data[it])}&`
                    }
                    ret = ret.substring(0, ret.length - 1)
                    return ret
                }
            ],
            // 设置请求头
            headers: {
   
                'Content-Type': 'multipart/form-data'
            }
        })
    }
}

到此核心部分代码已经编写完成,整个request.js文件代码如下:

// 统一的请求发送
import axios from 'axios'

// 创建 axios 实例
const service = axios.create({
   
    baseURL: '/api', 
})

export const baseRequest = (url, value = {
   }, method = 'post', options = {
   }) => {
   
    url = 'http://127.0.0.1:你的端口' + url
    if (method === 'post') {
   
        return service.post(url, value, options)
    } else if (method === 'get') {
   
        return service.get(url, {
   
            params: value,
            ...options
        })
    } else if (method === 'formdata') {
   
        return service({
   
            method: 'post',
            url,
            data: value,
            // 转换数据的方法
            transformRequest: [
                function (data) {
   
                    let ret = ''
                    for (const it in data) {
   
                        ret += `${encodeURIComponent(it)}=${encodeURIComponent(data[it])}&`
                    }
                    ret = ret.substring(0, ret.length - 1)
                    return ret
                }
            ],
            // 设置请求头
            headers: {
   
                'Content-Type': 'multipart/form-data'
            }
        })
    }
}

export default service

代码有了,下来是使用。

在具体的业务中,我们先建立一个该业务的js和vue文件,如:test.js和index.vue。

test.js中定义了一个封装了baseRequest函数的request函数,如下

import {
    baseRequest } from '@/utils/request' //这里的request.js存放在utils文件夹

const request = (url, ...arg) => baseRequest(`${
     url}`, ...arg)

export default {
   
    // 获取数据
    parkData(data) {
   
        return request('/data', data, 'get')
    },
}

index.vue中进行实际的调用

<script>
import indexApi from "../diz/js/test";

export default {
   
name:'test',
  components: {
   
  },
  data(){
   
    return {
   
    }
  },
  mounted () {
   
    this.getData()
  },
  methods: {
   
    getData(){
   
      indexApi.parkData(param1).then((data) => {
   
         //根据后端返回数据进行data的逻辑处理
      })
    }
  }
}
</script>
目录
相关文章
|
15天前
|
资源调度 JavaScript API
vue3封装城市联动组件
vue3封装城市联动组件
|
28天前
|
JavaScript 前端开发
【Vue面试题二十五】、你了解axios的原理吗?有看过它的源码吗?
这篇文章主要讨论了axios的使用、原理以及源码分析。 文章中首先回顾了axios的基本用法,包括发送请求、请求拦截器和响应拦截器的使用,以及如何取消请求。接着,作者实现了一个简易版的axios,包括构造函数、请求方法、拦截器的实现等。最后,文章对axios的源码进行了分析,包括目录结构、核心文件axios.js的内容,以及axios实例化过程中的配置合并、拦截器的使用等。
【Vue面试题二十五】、你了解axios的原理吗?有看过它的源码吗?
|
1月前
Vue3——基于tdesign封装一个通用的查询组件
Vue3——基于tdesign封装一个通用的查询组件
81 3
|
1月前
|
JavaScript API 开发者
vue自定义Hooks函数使用和封装思想
【8月更文挑战第8天】vue自定义Hooks函数使用和封装思想
87 1
|
28天前
|
JavaScript 前端开发
【Vue面试题二十七】、你了解axios的原理吗?有看过它的源码吗?
文章讨论了Vue项目目录结构的设计原则和实践,强调了项目结构清晰的重要性,提出了包括语义一致性、单一入口/出口、就近原则、公共文件的绝对路径引用等原则,并展示了单页面和多页面Vue项目的目录结构示例。
|
8天前
|
JavaScript 前端开发 开发者
vue中使用axios请求post接口,请求会发送两次
vue中使用axios请求post接口,请求会发送两次
|
28天前
|
JSON JavaScript 前端开发
【Vue面试题二十四】、Vue项目中有封装过axios吗?主要是封装哪方面的?
这篇文章讨论了在Vue项目中封装axios的最佳实践,包括设置接口请求前缀、请求头、状态码、请求方法的封装,以及如何使用请求和响应拦截器来处理token和响应状态,从而简化HTTP请求的配置和错误处理,提高代码的可维护性。
【Vue面试题二十四】、Vue项目中有封装过axios吗?主要是封装哪方面的?
|
1月前
|
JavaScript UED
以 Vue 3 项目为例,多个请求下如何全局封装 Loading 的展示与关闭?其中大有学问!
以 Vue 3 项目为例,多个请求下如何全局封装 Loading 的展示与关闭?其中大有学问!
|
1月前
|
JavaScript API 数据格式
【Vue 3】如何封装一个超级好用的 Hook!
【Vue 3】如何封装一个超级好用的 Hook!
|
1月前
|
JavaScript
Vue封装分页下拉选择器的组件
该组件名为,它将整合Element UI的下拉选择器和分页组件,以实现一个功能丰富的下拉选择器。用户可以通过搜索来过滤选项,并通过分页来浏览结果。