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>
目录
相关文章
|
1月前
|
资源调度 JavaScript 前端开发
vue-element-admin 综合开发四:axios安装和封装、mock安装/学习/使用
这篇文章是关于如何在Vue项目中使用axios进行网络请求、二次封装axios以及使用mockjs模拟响应数据的教程。
76 1
vue-element-admin 综合开发四:axios安装和封装、mock安装/学习/使用
|
1月前
vue3+Ts 二次封装ElementUI form表单
【10月更文挑战第8天】
186 59
|
1月前
|
缓存 JavaScript 搜索推荐
|
27天前
|
前端开发 JavaScript 安全
在vue前端开发中基于refreshToken和axios拦截器实现token的无感刷新
在vue前端开发中基于refreshToken和axios拦截器实现token的无感刷新
73 4
|
1月前
|
Web App开发 JavaScript 数据可视化
vue3扩展echart封装为组件库-快速复用
vue3扩展echart封装为组件库-快速复用
116 7
|
1月前
vue3 + Ts 中 使用 class 封装 axios
【10月更文挑战第8天】
100 1
|
1月前
vue3 + Ts 中 使用 class 封装 axios
【10月更文挑战第5天】
122 1
|
24天前
|
JavaScript 前端开发 Java
vue2知识点:Vue封装的过度与动画
vue2知识点:Vue封装的过度与动画
14 0
|
27天前
|
前端开发 JavaScript API
自己动手封装axios通用方法并上传至私有npm仓库:详细步骤与实现指南
自己动手封装axios通用方法并上传至私有npm仓库:详细步骤与实现指南
73 0

热门文章

最新文章

  • 1
    若依修改,若依如何发送请求---王清江07,axios的请求在request.js文件中,若依发送GET请求,必须用param
    116
  • 2
    axios发送post请求,如何接受和返回一个axios的字段,解决bug的方法,困难的事情先从简单做起,先从发送一个axios的post请求做起,解决方法查别人的资料,查看F12看network就行
    39
  • 3
    文本,前后端数据交互,简单请求,如何去给data数据赋值,在mounted()里赋值,利用axios发送的请求,res就是数据集,就是后端的数据,this.users = res.data.data
    44
  • 4
    Request failed with status code 400,使用axios.post要发送参数,认真比对原项目,看看有没有忘记什么?
    83
  • 5
    vue3 在 watchEffect 里中断未完成的 axios 请求(只保留最后一次请求的方法---连续点击查询按钮的优化)
    112
  • 6
    前后端数据交互.js文件的axios的写法,想要往后端发送数据,页面注入API,await的意思是同步等待服务器数据,并返回,axios注入在其他页面,其他页面调用的时候,同步作用
    42
  • 7
    前后端数据交互,API风格组合式API和选项式API,setup是一个标识,组合式编写的意思,使定义count.value的值自增的写法,组合式API使用axios的写法,ref定义响应数据写法
    27
  • 8
    网页设计,若依项目修改(It must be done)02------axios封装后发get请求,axios请求的位置在呢?
    43
  • 9
    前后端数据交互之axios的路径怎样找?axios的路径是那个,是你打开Tomcat之后,出现的路径+你项目写的接口路径
    34
  • 10
    数据交互,前后端数据请求,axios请求,对象结构的使用,E6的使用,结构赋值是什么?函数形参的obj如何,函数形参的obj就改成对象结构接收传入的数据对象
    24