Javascript 每个GET请求方法都有效,但最后一个方法获胜';不行,我做错什么了吗?

Javascript 每个GET请求方法都有效,但最后一个方法获胜';不行,我做错什么了吗?,javascript,reactjs,express,mongoose,Javascript,Reactjs,Express,Mongoose,这里最后一个GET请求方法是唯一一个没有返回任何内容的方法。我会记录控制台日志,以查看是否发生了某些情况,但控制台中甚至没有记录任何内容。 router.get('/', function(req, res) { Golf.find({Year: {$gte: 2021}, "Title": "Corales Puntacana Resort & Club Championship"}) .then(info => res.sta

这里最后一个GET请求方法是唯一一个没有返回任何内容的方法。我会记录控制台日志,以查看是否发生了某些情况,但控制台中甚至没有记录任何内容。

router.get('/', function(req, res) {
  Golf.find({Year: {$gte: 2021}, "Title": "Corales Puntacana Resort & Club Championship"})
    .then(info => res.status(200).json(info))
    .catch(err => res.status(404).json({msg: 'no scores found'}))
})

//Get data of each player in specific tournament
router.get('/:year/:tournament', function(req, res) {
    let tourny = decodeURI(req.params.tournament)
    let yearly = parseInt(req.params.year)
    Golf.find({Year: yearly, "Title": tourny})
      .then(info => res.status(200).json(info))
      .catch(err => res.status(404).json({msg: 'no scores found'}))
})

//Get years
router.get('/getyears', function(req, res) {
  Golf.find().distinct("Year")
    .then(info => res.status(200).json(info))
    .catch(err => res.status(404).json({msg: 'no years found'}))
})

//Get tournaments in a year
router.get('/:year', function(req, res) {
  let yearly = parseInt(req.params.year)
  Golf.find({Year: yearly}).distinct("Title")
    .then(info => res.status(200).json(info))
    .catch(err => res.status(404).json({msg: 'no years found'}))
})

//Get player names in a specific tournament
router.get('/player/:year/:tournament', function(req, res) {
  let tourny = decodeURI(req.params.tournament)
  let yearly = parseInt(req.params.year)
  Golf.find({Year: yearly, "Title": tourny}).distinct("Name")
    .then(info => res.status(200).json(info))
    .catch(err => res.status(404).json({msg: 'no scores found'}))
})

//Get all player's performances in database
router.get('/:name', function(req, res) {
  let person = decodeURI(req.params.name)
  console.log(person)
  Golf.find({"Name": person})
    .then(info => res.status(200).json(info))
    .catch(err => res.status(404).json({msg: 'no person found'}))
})
这是无法工作的GET请求方法

//Get all player's performances in database
router.get('/:name', function(req, res) {
  let person = decodeURI(req.params.name)
  console.log(person)
  Golf.find({"Name": person})
    .then(info => res.status(200).json(info))
    .catch(err => res.status(404).json({msg: 'no person found'}))
})

这两个管线定义匹配完全相同的管线:

router.get('/:year', ...);
router.get('/:name', ...);
因此,任何一个顶级路径元素都将被
/:year
路由的第一个匹配,而
/:name
路由将永远没有机会匹配任何路由

你需要改变你的URL设计,这样你就不会有这种冲突。或者,如果假定
:year
仅为数字年份,则在路由定义中使用更具体的正则表达式,该正则表达式仅匹配年份,而不是所有年份


仅供参考,与任何顶级路径匹配的路由中的顶级通配符通常是一个有问题的设计,因为它们确实限制了您将来添加新的顶级路由处理程序的能力,因为类似于
router.get('/:year',…)已经匹配了所有只有顶级路径的内容。

在同一路由路径上有两个链接参数,但它们的名称不同,但它们位于同一根路由上,这就是为什么只执行第一个请求函数(ex:router.get(':year',…);

这就是问题所在

router.get(':year',...);
router.get('/:name',...);
因此,这里是快速修复

您可以更改年份或名称的根路由 示例:

router.get('/year/:year',...);
router.get('/:name',...);


谢谢。

我注意到了这一点,并更改了
router.get('/:name',…)
to
router.get('/stat/:name',…)但似乎没有help@merenik-你说“似乎没用”是什么意思?如果您发送一个
/stat/John
请求,会发生什么情况?更改后是否重新启动服务器?不起作用或帮不上忙根本帮不了我们帮不了你。我们需要知道到底发生了什么?你从那个请求中得到了什么?我重新启动了服务器并发送了一个
/stat/John/
请求,但什么也没有出现,甚至控制台上的控制台日志也没有出现。@merenik-
/stat/John
似乎也与
路由器匹配。get(“/:year/:tournament”,…)
。正如我所说,匹配任何内容的顶级通配符都是一个问题。你可能应该把它们都扔掉。那为什么
router.get('/:year,…)
router.get('/getyears,…)
都能用呢?他们不相配吗?
router.get('/:year',...);
router.get('name/:name',...);