Vite代理POST请求失效,仍指向localhost:5173问题求助
解决Vite代理POST请求未转发到目标端口的问题
1. 检查POST请求路径是否带/api前缀
你的代理规则仅匹配/api开头的路径,所有需要转发的POST请求必须以/api开头:
- 错误示例:
fetch('/user', { method: 'POST' })—— 直接请求localhost:5173/user - 正确示例:
fetch('/api/user', { method: 'POST' })—— 会被代理到http://127.0.0.1:9000/user
2. 确认HTTP请求库的baseURL配置(如axios)
如果使用axios这类工具,需将baseURL设为/api,确保所有请求自动带上前缀:
import axios from 'axios' const api = axios.create({ baseURL: '/api' }) // 此POST请求会自动拼接/api前缀,触发代理 api.post('/user', formData)
3. 排查代理规则冲突或插件干扰
检查vite.config.js中是否有其他优先级更高的代理规则,或者安装的插件(如legacy插件)是否影响了请求转发逻辑。确保/api的代理规则是最先定义的,避免被其他规则覆盖。
4. 强制重启Vite开发服务
修改vite.config.js后,部分情况下开发服务不会自动加载新配置。完全关闭当前服务,重新执行npm run dev,确保代理配置生效。
5. 处理特殊Content-Type的POST请求
如果POST请求的Content-Type是multipart/form-data等特殊类型,需在代理配置中添加自定义处理:
proxy: { "/api": { target: "http://127.0.0.1:9000/", changeOrigin: true, rewrite: (path) => path.replace(/^\/api/, ""), configure: (proxy) => { proxy.on('proxyReq', (proxyReq) => { // 确保请求头正确传递 if (!proxyReq.getHeader('Content-Type')) { proxyReq.setHeader('Content-Type', 'application/json') } }) } }, },
6. 清除浏览器缓存或禁用Service Worker
浏览器缓存的旧请求路径、本地Service Worker可能会拦截请求。打开开发者工具的Network面板,勾选「Disable cache」,刷新页面后重新测试POST请求。
内容的提问来源于stack exchange,提问作者Smile
相关产品推荐
相关产品推荐

