58 条回复  ·  762 次点击
abcde123456789 小成 2024-7-11 11:21:58
如果后端允许跨域,就不需要设置 proxy ,开发环境和正式环境都不需要

后端允许跨域和 proxy 只存在一个就行了,都有的话会出错
gp0119 小成 2024-7-11 11:27:08
你的接口是不需要 /api 前缀的?在 axios 配置文件 baseURL 里去掉 /api, 在 proxy 配置文件 target 里路径后面加上 api ,估计测试环境里刚好把你 baseURL 里 /api 前缀替换掉了
ColdBird 小成 2024-7-11 11:30:45
你后端允许跨域,那就配置网络请求的全路径不要用资源域名就得了呗,这点东西搞不明白吗?大部分后端接口不允许跨域,所以才需要访问资源域名,在资源域名通过 nginx 配置代理。
bojackhorseman 小成 2024-7-11 11:40:36
@unco020511 #40
我一般都是在 .env 文件里配置一个 VITE_APP_HOST ,
本地开发 .env.development 里 VITE_APP_HOST=/api
正式环境的 .env.production VITE_APP_HOST=正式环境接口地址
然后在 axios 里 axios.defaults.baseURL = import.meta.env.VITE_APP_API_HOST ,vite 配置按照楼主写的,target 设置为测试环境接口地址
这样请求的时候本地开发请求 /api 会被 vite 代理到测试环境下而没有跨域问题。打包部署到线上请求的就是正式环境接口,更不会有跨域问题。
laobobo 小成 2024-7-11 13:39:46
我知道为啥有人发了帖子说 跨域问题了
shengchao 小成 2024-7-11 14:03:54
作为前端,我很难理解后端对此有什么困惑的?
monologue520 小成 2024-7-11 14:11:52
按照你的思路解决这个问题需要使用环境变量,在前端加 baseURL 的地方通过变量做下判断就可以了
kanepan19 小成 2024-7-11 17:29:00
op 被点名了

https://www.fshex.com/t/1056504#reply174
0xD800 小成 2024-7-12 09:43:28
你是给 axios 配置了 baseUrl='/api'吧,
我建议你了解基本的技术原理。
1. vue-router 的 history 模式,如果你是部署在后端应用中,比如放在 springboot 的 static 文件夹内,建议你直接设置为 webhashhistory ,否则你要手动处理路由,我觉得你可能会花费更多时间

2. vite 的 build.base ,这个是打包的时候把里面的引用文件都加上这个前缀,应用场景:把前端部署在某个域名的/xx 文件夹下,通过 www.example.com/xx/index.html 访问,此时也要主要 vue-router 的 history 的 base 参数

3. axios 的 baseUrl:这个是 API 接口的前缀,你可以控制在本地环境使用/api 前缀,然后用 proxy 拦截/api 前缀再转发。生产环境配置其他的 baseUrl 或者不配,看你后端地址怎么访问
123456
返回顶部