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

Express.js新增POST路由getroombyid请求返回404错误

问题根因

你的POST接口返回404是两个配置问题导致的,也刚好能解释为什么/getallrooms接口可以正常运行:

  • 相对路径拼接错误:前端axios写的是./api/rooms/getroombyid这种带./的相对路径,/getallrooms是在根路径页面调用的,相对路径会被解析为正确的/api/rooms/getallrooms;但Bookingscreen页面对应的前端路由是/book/:roomid,相对路径会被解析成/book/api/rooms/getroombyid,和后端挂载的路由前缀完全不匹配。
  • 端口转发缺失:后端服务默认监听的是5000端口,但报错里的请求是发往3000端口(React前端开发服务器默认端口),如果没有配置代理,就算路径写对了请求也到不了后端服务。
修复方案
  1. 修正前端接口请求路径,去掉路径前的./,统一用根路径开头的写法:
// Bookingscreen 中请求代码修改为
const data = (await axios.post('/api/rooms/getroombyid', {roomid : match.params.roomid})).data
  1. 配置前端开发服务代理,把/api开头的请求转发到后端5000端口:
    如果是create-react-app搭建的项目,直接在前端项目根目录的package.json里新增一行配置:
"proxy": "http://localhost:5000"

配置完成后重启前端开发服务即可生效。
3. (可选优化)后端POST接口中已经提取了roomid变量,查询数据库时可以直接复用,不影响功能仅简化代码:

router.post("/getroombyid", async(req, res) => {
    const roomid = req.body.roomid
    try {
         const room = await Room.findOne({'_id' : roomid})
         res.send(room)
    } catch (error) {
         return res.status(400).json({ message: error });
    }
});
验证方法

修改完成后重启前后端服务,触发请求时控制台显示的请求地址应为http://localhost:3000/api/rooms/getroombyid,代理会自动将请求转发到后端对应路由,即可正常返回数据,不再报404错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:30:44