Vue项目中封装axios管理API的两种方案

作者:青山有信时间:2026-10-23 11:00:14浏览:398

本文介绍在Vue项目中封装axios以统一管控API的两种常见方式。第一种适用于接口较少、层级简单的场景,通过创建实例并挂载原型实现;第二种适用于接口较多、结构复杂的场景,采用模块化目录管理。内容涵盖环境配置、拦截器处理及具体代码实现,帮助开发者高效维护多环境接口地址。

封装axios管理API的背景与目的

前言:在项目开发过程中,通常需要处理大量的接口请求。由于测试、开发及生产环境所使用的接口baseurl各不相同,若在项目开发完成后逐一修改每个请求页面的地址,操作将极为繁琐。

因此,为了更好地管控这些API,我们需要对axios进行封装,定义统一的接口baseurl。这样在切换环境时,可以更便捷地进行管理和修改。接下来直接展示具体实现代码。

第一种封装方案:基础实例封装

首先,创建一个名为api的文件夹用于存放相关配置。


import axios from 'axios'
  为了处理java字符串问题
import qs from 'qs' 
创建一个axios实例 在其中设置超时时间和响应头
const http = axios.create({
  baseURL: process.env.VUE_APP_MOCK_DATA_URL, // api 的 base_url
  timeout: 3000,
  headers: {
    'Content-Type': 'application/json;charset=utf-8'
  }
})
/**
* 请求拦截 可以在发送请求的时候加上判断信息
*/
http.interceptors.request.use(config => {
 *****
  return config
}, error => {
  return Promise.reject(error)
})
/**
* 响应拦截 可以对传回的数据做出判断 
*/
http.interceptors.response.use(response => {
  return response
}, error => {
  return Promise.reject(error)
})

将封装好的axios实例暴露出去,以便其他模块调用。

export default http

在main.js文件中引入该模块,并将其挂载到Vue的原型对象上,使其全局可用。


  import http from '@/api/api.js'
 Vue.prototype.$http = http

第一种封装方式通常适用于API数量不多且复杂层级较低的情况,这种简单的封装方式完全能够满足需求。

第二种封装方案:模块化接口管理

第二种封装方式如下所示。

'use strict'

同样需要引入axios和qs这两个依赖包。


import axios from 'axios'
import qs from 'qs'

// 设置拦截器 默认请求url得前缀
// axios.defaults.baseURL = process.env.NODE_ENV === 'production' ? '/custInfo' :
//  '127.0.0.1:8888', 
//  axios.interceptors.request.use(config => {
//   // // loading
//   return config
//  }, error => {
//   return Promise.reject(error)
//  })
// 
// axios.interceptors.response.use(response => {
//  return response
// }, error => {
//  return Promise.resolve(error.response)
// })

export default {
 post(url, data) {
  return new Promise((resolve, reject) => {
   axios({
    method: 'post',
    url,
    // qs这个插件主要是为了解决java后台接受到得参数必须是字符串
    data: qs.stringify(data),
    headers: {
     'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
    }
   }).then((res) => {
    resolve(res)
   }).catch((error) => {
    reject(error)
   })
  })
 },
 get (url, params) {
  return new Promise((resolve, reject) => {
   axios({
    method: 'get',
    url,
    params, // get 请求时带的参数
   }).then((res) => {
    resolve(res)
   }).catch((error) => {
    reject(error)
   })
  })
 }
}

封装完成后,可以创建一个专门的文件夹,将所有接口定义集中在一起。


  getCustValue(params) {
    return $http.post('/custOverview/getCustValue', params);
  },
  getTacntrt(params) {
    return $http.get('/dict/getTacntrtMgmtMsgMonth', params);
  },
  query(params) {
    return $http.post('/indexManager/queryVipFlowCount', params);
  }

然后逐一列举各个接口,这样可以非常清晰地梳理和管理API。

总结:以上介绍了在JS/Vue环境中封装axios来管控API的两种主要方式。

以上所述是小编给大家介绍的JS中封装axios来管控api的2种方式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对本站网站的支持! 如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

作者最新文章
相关文章
更多