当前位置:   article > 正文

Vite配置Proxy代理解决跨域问题_vite配置代理

vite配置代理

前言

大家好,我是南木元元,热衷分享有趣实用的文章。今天来分享一下如何在vite中配置proxy代理来解决跨越问题。

什么是跨域问题

跨域问题:浏览器从一个网页去请求另一个资源时,域名、端口、协议任一不同,都是跨域。

常用解决方案

常用的解决跨域问题的方式有如下几种:

  • jsonp:利用script标签可跨域的特点,在跨域脚本中可以直接回调当前脚本的函数。
  • cors:服务器设置http响应头中的Access-Control-Allow-Origin值,解除跨域限制。
  • node中间件代理:启一个代理服务器,实现数据转发,利用了服务器向服务器请求无需遵循同源策略的原理。
  • nginx反向代理:实现原理类似于node中间件代理,通过nginx服务器来转发请求,正向代理和反向代理的区别主要在于正向代理中代理是客户端设置的,而反向代理中代理是服务端设置的。

vite proxy实现原理

在这里插入图片描述
vite配置proxy代理属于node中间件代理,简单来说,就是通过开启一个代理服务器,来充当一个中间层的角色,拦截前端发起的请求。代理服务器实际做的事:会在前端页面发起请求时,将请求转发到真实的后端服务器,然后响应给浏览器。利用服务器之间不存在同源策略限制的原理,整个过程通过代理服务器完成,浏览器是无感的,就会绕过浏览器的同源策略。

下面就来讲讲如何在Vite中配置proxy代理。

Vite中配置proxy代理

vite.config.ts配置

假如我现在想从本地请求后端的一个接口http://www.test.com/login ,应该怎样配置代理服务器呢?

参考Vite官网:server.proxy
在这里插入图片描述
在vite.config.ts中进行如下配置

server: {
  // http://localhost:5173/api/login -> http://www.test.com/login
  proxy: {
    //api是自行设置的请求前缀,任何请求路径以/api开头的请求将被代理到对应的target目标
    '/api': {
      target: http://www.test.com, //目标域名
      changeOrigin: true, //需要代理跨域
      rewrite: (path) => path.replace(/^\/api/, ''), //路径重写,把'/api'替换为''
    },
  },
},
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

配置代理后,会把当前请求http://localhost:5173/api/login代理到target中的地址http://www.test.com/api/login,并且通过路径重写,最终转发到http://www.test.com/login真实后端服务器,解决跨域问题。

在配置中使用环境变量

通常一个项目在开发过程中会有不同的环境,可以建立相应的.env文件,把需要的环境变量配置在其中。

如.env.development代表开发模式文件

NODE_ENV = 'development'
VITE_APP_TITLE = 'dev-project'
VITE_APP_BASE_API = '/api'
VITE_SERVE = 'http://www.test.com'
  • 1
  • 2
  • 3
  • 4

.env.production用于保存生产模式下的各种环境变量

NODE_ENV = 'production'
VITE_APP_TITLE = 'pro-project'
VITE_APP_BASE_API = '/prod-api'
VITE_SERVE = 'http://www.test.com'
  • 1
  • 2
  • 3
  • 4

默认情况下,开发服务器 (dev命令) 运行在 development (开发) 模式,而 build命令则运行在 production(生产) 模式。

  • Vite中获取.env 文件中的环境变量

需要使用loadEnv方法,加载当前模式mode下对应的 .env 文件,获取文件中对应的环境变量。以下是Vite官网的说明:

在这里插入图片描述

process.cwd()为项目根目录(index.html 文件所在的位置),把.env.development和.env.production都配置在项目根目录下,就可通过loadEnv来加载根目录下的所有.env文件,通过mode获取当前模式的环境变量。env中就保存着各种模式下对应的环境变量。

于是可以把配置代理改写成:

server: {
  proxy: {
    [env.VITE_APP_BASE_API]: {
      target: env.VITE_SERVE, 
      changeOrigin: true, 
      rewrite: (path) => path.replace(/^\/api/, ''), 
    },
  },
},
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

结语

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/598114
推荐阅读
相关标签