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

Postman调用MongoDB相关接口时出现Cannot GET错误及路由获取req.query失败求助

解决Postman中Cannot GET错误及req.query获取问题

我来帮你拆解下问题根源,其实核心是路由定义和请求URL不匹配导致的,咱们一步步来解决:

1. 为什么请求/questions会提示Cannot GET?

你写的路由代码是:

router.get('/questions/:id',(req,res) => { 
  console.log(req.query) 
  res.send(req.query) 
})

这个路由的规则是:只匹配带id路径参数的GET请求,比如/questions/123或者/questions/abc这类格式。而你在Postman里直接请求/questions,服务器找不到对应的GET路由,自然就返回Cannot GET /questions了。

2. 如何正确获取req.query?

req.query是用来获取URL中?后面的查询参数(比如/questions?keyword=mongodb&page=1),如果你想通过查询参数发起请求,需要调整路由定义:

方案一:单独定义支持查询参数的路由

如果不需要路径参数id,直接写不带:id的路由即可:

router.get('/questions', (req, res) => {
  console.log(req.query); // 比如请求/questions?name=test,这里会输出{ name: 'test' }
  res.send(req.query);
})

之后在Postman里请求/questions?xxx=yyy,就能正常拿到req.query的数据了。

方案二:同时支持路径参数和查询参数

如果你需要既可以通过id查询单条数据,又可以通过查询参数筛选列表,那就分开定义两个路由:

// 匹配带id的请求,获取路径参数
router.get('/questions/:id', (req, res) => {
  console.log("路径参数id:", req.params.id); // 比如请求/questions/123,这里拿到123
  res.send(`获取到id:${req.params.id}`);
})

// 匹配不带id的请求,获取查询参数
router.get('/questions', (req, res) => {
  console.log("查询参数:", req.query);
  res.send(req.query);
})

3. 关于MongoDB接口的Cannot GET错误

这个问题大概率也是类似的路由匹配问题,你可以从这几点排查:

  • 确认请求的HTTP方法和路由定义一致:比如如果路由是router.post('/xxx', ...),就不能用GET请求访问
  • 检查请求的URL路径和路由完全匹配:有没有多写/少写斜杠,或者遗漏了必要的路径参数
  • 查看服务器日志,确认请求是否真的到达了对应的路由处理函数

调试小技巧

  • 在路由处理函数开头加日志,比如console.log("收到请求路径:", req.path),这样能快速确认服务器有没有接收到你的请求
  • 核对Postman的请求端口和服务器启动的端口是否一致,避免端口不匹配导致的请求失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 18:07:33