Node.js Express服务器GET请求返回异常响应问题求助
你的问题核心是GET请求未命中服务器的目标API路由,导致服务器返回了HTML页面(通常是404错误页或静态首页),进而触发JSON解析错误,同时服务器端的日志代码根本没执行。以下是针对性的排查和解决步骤:
核对客户端请求URL与服务器路由的一致性
打开浏览器开发者工具的「Network」面板,找到触发错误的GET请求,查看Request URL是否和server.js中定义的路由完全匹配。比如服务器路由是/api/weather-logs,客户端fetch就不能写成/logs或带错端口/域名。同域情况下建议使用绝对路径(如/api/weather-logs),跨域则要包含完整的服务器地址(如http://localhost:3000/api/weather-logs)。检查服务器路由的注册顺序
如果你的服务器启用了静态文件服务(比如app.use(express.static('public'))),要确保API路由的注册代码在静态文件服务之前。如果静态文件服务先注册,当请求路径和静态文件目录中的HTML文件重名时,服务器会优先返回HTML,而不会触发API路由。验证服务器监听端口与客户端请求端口一致
确认server.js中app.listen()指定的端口(如3000),和客户端请求URL中的端口完全相同。避免出现服务器跑在3000端口,客户端却请求3001的情况。排查服务器路由的语法错误
检查server.js中的GET路由代码是否存在语法问题:- 确认路由回调函数的参数(
req、res)是否正确传递 - 确认响应语句(如
res.json(yourData))是否正确书写,没有被注释或遗漏 - 可以在路由回调的最开头添加
console.log("Received logs request"),测试请求是否真的到达该路由
- 确认路由回调函数的参数(
直接在浏览器地址栏测试服务器路由
比如服务器运行在localhost:3000,直接在地址栏输入http://localhost:3000/你的API路由,查看返回内容:- 如果返回JSON数据,说明问题出在客户端的fetch请求配置
- 如果返回HTML,说明服务器路由配置存在问题,需要重新检查路由定义
内容的提问来源于stack exchange,提问作者user4366391

