两条路线使用参数,但只有一条路线有效

Two routes use params but only one is working

我正在尝试制作一个网站,向您展示该国所有不同城市的所有餐馆。 我为使用参数将您重定向到餐厅页面的餐厅添加了一条路线。

router.get('/:name',checkUser, async (req, res) => {

    try {
        
        const wila = await wilaya.findOne({nom : req.params.name})
        const re = await restaurant.find({ville : wila.nom})
        
        res.render('html/villeDetails', {
        wilay: wila,
        title : wila.nom,css : "villeDetails",
        resto : re
        })
    } catch {
        res.redirect('/')
    }
    })

还有一条同样使用参数将您带到城市详细信息页面的路线

router.get('/:id',checkUser, async (req, res) => {
  
    try {
      console.log('here')
      const resto = await restaurant.findById(req.params.id)
      comment.find({resId : req.params.id})
      .then((result) => {
        res.render('html/restaurantDetails', {
        res: resto,
        title : resto.nom,
        css : "restaurantDetails",
        comm : result
        
      })
      })
    } catch {
      res.redirect('/')
    }
  })

问题是只有餐厅路线有效,当我删除餐厅路线时,城市路线开始工作。 我不知道为什么会这样。

/:name/:id 都在同一条路线上 (/)。我注意到,当发生这种情况时,只会识别出首先看到的路线 (/:name)。您可以尝试更改其中之一的路线,例如 /:name 餐厅路线和 /restaurant/:id 城市路线。

是的。当您使用 /:id/:name/:post_id 等命名路径参数时,您正在做的事情是告诉 express 路由器您将在 URI 的该段中传递“某物”,并且您希望将其存储在具有该名称的变量中。它不知道您传递的是 ID、名称还是其他内容。为此使用嵌套路由。我建议您查看 this guide