You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vite+React+Redux Toolkit请求返回自身index.html问题求助

问题分析与解决方案

核心问题

RTK请求返回前端index.html的根源是请求路径未匹配Vite代理规则,导致Vite把API请求当成SPA路由,触发fallback机制返回index.html。手动fetch能正常工作,大概率是你在fetch里手动加了/api前缀,但RTK的请求路径没加这个前缀。

具体修复步骤

1. 修正API请求路径前缀

检查你的SECTIONS_URL常量,确保它以/api开头,和Vite代理配置的前缀一致:

// 示例:constants.js
export const SECTIONS_URL = '/api/sections';

这样RTK生成的请求URL会是/api/sections、/api/sections/${sectionUrl},能被Vite代理捕获并转发到后端服务。

2. 确认Vite代理配置匹配后端路由

你的Vite代理配置中,rewrite: (path) => path.replace(/^\/api/, "")会把/api/sections重写为/sections,正好匹配后端的app.use("/sections", sectionRoutes),这个配置本身是正确的,不需要修改。

3. 移除不必要的responseHandler

之前添加的responseHandler: "text"是因为请求返回了index.html(非JSON格式)导致解析错误,现在路径正确后,后端会返回标准JSON,所以删掉这个配置,让RTK自动解析JSON:

// sectionApiSlice.js 修改getSectionByUrl
getSectionByUrl: builder.query({
    query: (sectionUrl) => ({
        url: `${SECTIONS_URL}/${sectionUrl}`,
        // 移除responseHandler: "text"
    }),
    keepUnusedDataFor: 5,
}),

4. 验证请求路径

启动项目后,打开浏览器DevTools的Network面板,查看RTK发送的请求URL:

  • 正确格式:http://localhost:3000/api/sections/xxx
  • 如果看到的是http://localhost:3000/sections/xxx,说明还是没加/api前缀,回到第一步检查常量配置。

额外注意事项

  • 不要把index.html放到public文件夹,Vite默认入口文件在项目根目录,放public会导致资源加载路径错误,引发浏览器崩溃。
  • 后端的CORS配置已经启用,配合Vite代理可以正常处理跨域,不需要额外调整。

内容的提问来源于stack exchange,提问作者Michael Jarrett

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 03:33:19