Express查询Postgres时GET请求失效POST正常,该如何排查解决?
你遇到的报错本质是前端尝试把返回的HTML内容当成JSON解析,GET请求没有命中你写的业务接口,而是返回了其他HTML资源(最常见的是404页面、SPA应用的首页index.html)。
核心原因
Express的路由匹配是严格按注册顺序执行的,你大概率是把/pledges的GET路由注册在了静态资源中间件、SPA通配符 fallback 路由(比如app.get('*', ...)返回index.html的配置)之后:GET请求发送后会先命中前面的通配符GET路由,直接返回HTML,自然无法解析成JSON。而POST请求不会匹配到GET类型的通配符路由,所以能正常走到你写的POST接口返回JSON数据。
排查&修复步骤
- 打开浏览器开发者工具的「网络」面板,找到
/pledges的GET请求,查看响应内容确认是不是HTML文件,同时确认状态码。 - 调整Express的路由注册顺序,把所有业务接口的注册逻辑放在静态资源中间件、通配符路由之前,示例:
// 正确顺序:先注册业务接口 const pledgesRouter = require('./你的router文件路径'); app.use('/pledges', pledgesRouter); // 再注册静态资源和SPA fallback逻辑 app.use(express.static('dist')); app.get('*', (req, res) => { res.sendFile(path.resolve(__dirname, 'dist', 'index.html')); });
- 确认路由挂载的路径拼写没有错误,
/pledges前缀和前端请求路径一致。
内容的提问来源于stack exchange,提问作者andyong5
相关产品推荐
相关产品推荐

