Vue 中的Axios请求封装(修改版)

 更新时间:2026年03月02日 10:48:21   作者:勇宝趣学前端  
本文详细介绍了在Vue项目中对axios进行简单封装的过程,包括安装axios、封装请求基文件、创建api文件夹、引入请求api并使用等步骤,通过封装,可以统一处理请求,感兴趣的朋友跟随小编一起看看吧

在使用 Vue 开发我们的项目时,势必要使用到router,可能也会使用到vuex,但是我们肯定会使用到axios,对于初学者来说我们基本都是拿过来使用的,直接在main.js中进行导入即可。但是在真正做项目的时候,我们都是需要对axios进行请求封装的,比如我们请求需要携带token,或者我们有多个环境:如测试环境、开发环境等…
这里主要记录一下axios的简单封装。

一、准备阶段

初始化项目

⭐ 安装 Vue 这里就不开展说了,我们重创建一个Vue项目开始。

Vue create my-project
cd my-project # 进入项目目录
yarn # 安装依赖,也可以使用 npm install
yarn serve # 启动项目

安装 axios

⭐项目创建完成后,我们开始安装axios

yarn add axios -S

-D: --save-dev 的简写,模块写入到devDependencies对象。

  • devDependencies对象,是我们开发的时候需要用到的一些包,只用于开发阶段,真正打包上线的时候并不需要这些包,因为这些工具只是你用来打包代码的 。

-S: --save 的简写,模块写入到dependencies对象。

  • 需要发布到生产环境中的,就比如你要跑一个基于vue的项目,所以需要vue.js来支持,vue.js 文件就需要跟随项目到最终的生产环境。

二、axios 引入

简单引入

⭐ 如上所说,我们安装完axios可以直接进行使用。

在 main.js 中导入 axios

import axios from 'axios'
// 全局挂载
Vue.prototype.$axios = axios
// 设置默认路由前缀
axios.defaults.baseURL = 'http://localhost:8080'
new Vue({
    axios,
    router,
    store,
    render: h => h(app)
}).$mount('#app')

.vue文件中使用

<script>
    methods:{
        Login () {
            this.$axios({
                url:'/login',
                method: 'post',
                data:{
                    userName:'xxxx',
                    password:'xxxx'
                }
            }).then((res)=>{
                console.log(res)
            })
        }
    }
</script>

三、封装 axios 请求

⭐ 我们不在main.js中进行引入。

1. 根目录下配置不同环境所需接口基址

  • .env 全局默认配置文件,不论什么环境都会加载合并
  • .env.development 开发环境下的配置文件
  • .env.production 生产环境下的配置文件
  • .env.local 本地开发环境配置
  • 命名规则:

属性名必须以VUE_APP_开头,比如VUE_APP_XXX

# 本地开发环境配置(.env.local)
NODE_ENV=development
# base url
VUE_APP_API_BASE_URL=http://xx.xx.xx.xxx:8080/xxx
VUE_APP_FORM_BASE_URL=http://xx.xx.xx.xxx:8080/xxx
VUE_APP_SIGN_OFF_BASE_URL=http://xx.xx.xx.xxx:8080/xxx
VUE_APP_LOGIN_BASE_URL=http://xx.xx.xx.xxx:8080/xxx
VUE_APP_SSO_BASE_URL=http://xx.xx.xx.xxx:8080/xxx
// 測試服client-id
# VUE_APP_SSO_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
// 本地client-id
VUE_APP_SSO_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
VUE_APP_FILE_SERVER_BASE_URL=http://xx.xx.xx.xxx:8080/xxx

2. 封装请求基文件

⭐ 在 src 目录下创建src/tools/http/request.js

// src/tools/http/request.js
import axios from 'axios'
import { Message} from 'element-ui' // 引入 Element 组件
export default function request ({ type='COMMOn',data }){
    let baseUrl = process.env.VUE_APP_API_BASE_URL // 这是配置的 .env 文件
    switch (type) {
            case 'COMMON':
            baseUrl = process.env.VUE_APP_API_BASE_URL
            break;
            case 'LOGIN':
            baseUrl = process.env.VUE_APP_LOGIN_BASE_URL
            break;
            case 'FROM':
            baseUrl = process.env.VUE_APP_FORM_BASE_URL
      	    break;
        default:
            break;
    }
    console.log('baseUrl', process.env)
    const service = axios.create({
        baseURL: baseUrl,
        timeout: 5000
    })
    // 请求拦截器
    service.interceptors.request.use(config => {
        //发请求前做的一些处理,数据转化,配置请求头,设置token,设置loading等,根据需求去添加
        config.data = JSON.stringify(config.data); //数据转化,也可以使用qs转换
        config.headers = {
            'Content-Type':'application/x-www-form-urlencoded' //配置请求头
        }
        //注意使用token的时候需要引入cookie方法或者用本地localStorage等方法,推荐js-cookie
        const token = getCookie('名称');//这里取token之前,你肯定需要先拿到token,存一下
        if(token){
            config.params = {'token':token} //如果要求携带在参数中
            config.headers.token= token; //如果要求携带在请求头中
        }
        return config
    }, error => {
        Promise.reject(error)
    })
    // 响应拦截器
    service.interceptors.response.use(response => {
        return response
    }, error => {
        Message.error(error.message)
        return Promise.resolve(error.response)
    }
    return service(data)
}

四、请求数据

1. 创建api文件夹

⭐ 在src目录下创建api文件夹,放置每个请求模块的方法,以后所有的请求写在这个文件夹下边,比如我们系统有一个角色配置模块。

创建src/api/role-config.js

// src/api/role-config.js
import request from '@/tools/http/request'
// 获取角色列表的 api
export function getRoleListsApi (data) {  // 接口需要的 data 数据
    return request ({
        data:{
            url:'/roleList',
            method:'post',
            data
        }
    })
}

3. 引入请求 api

Role.vue组件进行请求数据

<script>
    import { getRoleListsApi } from '@/api/role-config.js'
    export default {
        name: 'Role',
        data (){
            return {
                roleList: [] // 存储需要渲染的数据
            }
        },
        methods:{
            // 获取角色列表
            async getRoleList () {
                const obj = { roleid:'普通会员' }
                const { roleList, code } = await getRoleListsApi(obj)
                if(code === 200){
                    this.roleList = roleList
                }
            }
        }
    }
</script>

五、启动项目

⭐ 在开发环境下启动项目

1. 配置 package.json

  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "local": "vue-cli-service build --mode local", // 新加的
  },  

2. 打开命令行

  yarn local # 运行项目

总结

拖了有三天了,今天终于把这一块梳理清楚了,我承认自己懒了,这几天工作上相对比较忙,可能国庆回来会好一点吧!今天通过对axios请求简单的封装,让我对模块化有了一个新的认识,最有我想说的是,有的时候踏下心来做成一件事情真的很开心,事情可大可小,但完成的过程真的是发自内心的高兴。有些人说自己一定要做大事才能定义一个人的成功,但是每一次付出的小事不正是我们向成功靠近的基石吗。

到此这篇关于Vue 之 Axios请求封装(修改版)的文章就介绍到这了,更多相关Vue Axios请求封装内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue 服务端渲染SSR示例详解

    Vue 服务端渲染SSR示例详解

    这篇文章主要介绍了Vue 服务端渲染SSR示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Vue组件之事件总线和消息发布订阅详解

    Vue组件之事件总线和消息发布订阅详解

    这篇文章主要为大家详细介绍了Vue组件之事件总线和消息发布订阅,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • Vue3使用transition实现组件切换的过渡效果

    Vue3使用transition实现组件切换的过渡效果

    <Transition> 是一个内置组件,这意味着它在任意别的组件中都可以被使用,无需注册,它可以将进入和离开动画应用到通过默认插槽传递给它的元素或组件上,本文介绍了Vue3使用transition实现组件切换的过渡效果,需要的朋友可以参考下
    2024-09-09
  • Vue使用vm.$set()解决对象新增属性不能响应的问题

    Vue使用vm.$set()解决对象新增属性不能响应的问题

    这篇文章主要介绍了Vue使用vm.$set()解决对象新增属性不能响应的问题,为了解决这个问题,Vue提供了一个特殊的方法vm.$set(object, propertyName, value),也可以使用全局的Vue.set(object, propertyName, value)方法,需要的朋友可以参考下
    2023-05-05
  • vue-父子组件和ref实例详解

    vue-父子组件和ref实例详解

    这篇文章通过实例代码给大家介绍了vue-父子组件传值和ref获取dom和组件的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • vue实现鼠标滑动预览视频封面组件示例详解

    vue实现鼠标滑动预览视频封面组件示例详解

    这篇文章主要为大家介绍了vue实现鼠标滑动预览视频封面组件示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Vue3 使用Element Plus表格单选带checkbox功能

    Vue3 使用Element Plus表格单选带checkbox功能

    这篇文章主要介绍了Vue3 使用Element Plus表格单选带checkbox,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-11-11
  • vue 配置多页面应用的示例代码

    vue 配置多页面应用的示例代码

    这篇文章主要介绍了vue 配置多页面应用的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • django简单的前后端分离的数据传输实例 axios

    django简单的前后端分离的数据传输实例 axios

    这篇文章主要介绍了django简单的前后端分离的数据传输实例 axios,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Vue iframe更改src后页面未刷新问题解决方法

    Vue iframe更改src后页面未刷新问题解决方法

    这篇文章主要介绍了Vue iframe更改src后页面未刷新问题解决,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04

最新评论