Vite前端API调用与本地开发代理配置策略详解

 更新时间:2025年12月30日 08:48:08   作者:nvd11  
本文详细介绍了如何在前端代码中使用相对路径定义后端API URL,并通过Vite开发服务器的代理配置,解决了跨域资源共享(CORS)问题和环境差异问题,通过这套组合方案,实现了同一份前端代码在本地开发和生产环境下的无缝运行

本文档详细描述了本项目在前端代码中定义后端 API URL 的风格,以及如何配置 Vite 开发服务器的代理(Proxy),并解释这套组合方案解决了哪些关键问题。

一、 核心问题

现代 Web 开发中,前端应用(运行在浏览器)和后端 API(运行在服务器)通常是分离的。这会带来两个主要问题:

  • 跨域资源共享 (CORS):在本地开发时,前端运行在 http://localhost:5173,而后端 API 运行在云端的 https://gateway.jpgcp.cloud。由于源(协议、域名、端口)不同,浏览器会出于安全策略,默认阻止前端直接调用后端 API。
  • 环境差异:前端代码需要一种方法,既能在本地开发时正确调用云端 API,又能在部署到生产环境后,正确地调用生产环境的 API,而不需要每次都手动修改代码。

二、 解决方案:“相对路径” + “Vite 代理”

我们采用了一套标准的、优雅的组合方案来解决以上所有问题。

1. API URL 风格:使用相对路径

我们修改了 src/services/api.ts 文件,将 API 的 URL 定义为一个相对路径

代码 (src/services/api.ts):

// The URL of your backend API. Using a relative path works for both
// local development (with proxy) and production deployment.
const API_URL = '/chat-api-svc/api/v1/chat';

// ...
const response = await fetch(API_URL, { ... });

原理与优势:

  • 当 URL 以 / 开头时,浏览器会自动将当前页面的协议和域名加在它的前面。
  • 在生产环境: 页面在 https://gateway.jpgcp.cloud/chat/,请求就会发往 https://gateway.jpgcp.cloud/chat-api-svc/api/v1/chat。这正好能匹配上我们 GKE Gateway 中的路由规则,实现了同源调用,没有 CORS 问题
  • 在本地开发环境: 页面在 http://localhost:5173/chat/,请求就会发往 http://localhost:5173/chat-api-svc/api/v1/chat。这个地址本身是无效的,但它为我们的第二步——Vite 代理——创造了条件。

2. Vite 代理配置

为了让本地开发时的 API 请求能成功,我们配置了 Vite 的开发服务器,让它充当一个代理。

配置 (vite.config.ts):

// ...
export default defineConfig({
  // ...
  server: {
    host: true,
    // This proxy configuration is for the local development server ONLY.
    proxy: {
      // 当开发服务器收到一个以 '/chat-api-svc' 开头的请求时...
      '/chat-api-svc': {
        // ...就将它转发给这个目标地址。
        target: 'https://gateway.jpgcp.cloud',
        // 改变请求的 Origin 头,对于 HTTPS 和虚拟主机托管是必需的。
        changeOrigin: true,
      },
    },
  },
  // ...
})

原理与优势:

  • 这个 server.proxy 配置仅在 npm run dev 时生效,对生产构建没有影响。
  • 它告诉 Vite:“你就是中间人。所有发给你的、路径以 /chat-api-svc 开头的请求,都不要自己处理,而是原封不动地转发给 https://gateway.jpgcp.cloud,然后再把那边的响应拿回来,交给浏览器。”
  • 对于浏览器来说,它始终认为自己是在和 localhost:5173 通信,因此完全规避了 CORS 问题

三、 总结

通过**“前端使用相对路径”“本地开发环境使用代理”**这套组合拳,我们实现了:

  • 一套代码,两种环境无缝运行:同一份前端代码,无需任何修改,既可以在本地开发时调用云端 API,也可以在部署后调用生产环境的网关。
  • 彻底解决 CORS 问题:无论是本地还是生产,从浏览器的视角来看,API 调用都是同源的。
  • 配置清晰,易于维护:API 的真实地址只存在于一处(Vite 的代理配置中),便于未来修改。生产环境的路由则完全由 GKE Gateway 的配置来管理。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue实现图片预览组件封装与使用

    vue实现图片预览组件封装与使用

    这篇文章主要为大家详细介绍了vue实现图片预览组件封装与使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • Vue批量文件上传并发的踩坑指南

    Vue批量文件上传并发的踩坑指南

    本文详细探讨了Vue批量文件上传中的并发问题,并提出了四种解决方案:基础版(固定并发数)、进阶版、高级版(和极简版,每种方案针对不同场景和需求进行了优化,旨在平衡上传效率与服务器压力,同时提高上传的稳定性和成功率,需要的朋友可以参考下
    2026-04-04
  • vue2.0项目集成Cesium的实现方法

    vue2.0项目集成Cesium的实现方法

    这篇文章主要介绍了vue2.0项目集成Cesium的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • vue实现随机验证码功能(完整代码)

    vue实现随机验证码功能(完整代码)

    验证码功能在我们的身边用处极广,今天小编给大家分享基于vue实现随机验证码功能,感兴趣的朋友跟随小编一起看看吧
    2019-12-12
  • 基于 Vue.js 之 iView UI 框架非工程化实践记录(推荐)

    基于 Vue.js 之 iView UI 框架非工程化实践记录(推荐)

    为了快速体验 MVVM 模式,我选择了非工程化方式来起步,并选择使用 Vue.js,以及基于它构建的 iView UI 框架。本文给大家分享基于 Vue.js 之 iView UI 框架非工程化实践记录,需要的朋友参考下吧
    2017-11-11
  • vue导出excel和echart图形分别在不同工作表的实现方法

    vue导出excel和echart图形分别在不同工作表的实现方法

    这篇文章主要给大家介绍了如何使用vue实现导出excel和echart图形分别在不同工作表,文中有详细的代码示例供大家参考,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-10-10
  • vue路由前进后退动画效果的实现代码

    vue路由前进后退动画效果的实现代码

    这篇文章主要介绍了vue路由前进后退动画效果,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-12-12
  • vue实现聊天框自动滚动的示例代码

    vue实现聊天框自动滚动的示例代码

    本文主要介绍了vue实现聊天框自动滚动的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • vuex如何修改状态state的方法

    vuex如何修改状态state的方法

    这篇文章主要介绍了vuex如何修改状态state的方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 解决vue scoped html样式无效的问题

    解决vue scoped html样式无效的问题

    这篇文章主要介绍了解决vue scoped html样式无效的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10

最新评论