При добавлении параметров маршрутизатор Express использует другой маршрут - PullRequest
0 голосов
/ 06 марта 2019

У меня есть два маршрута

Я пытаюсь получить доступ / имя и передать имя параметра. Он попадает в маршрут / name, когда у меня есть конечная точка как просто / name без параметра, но когда я меняю его на «/ name /: name», чтобы получить параметр, он переключается и начинает использовать маршрут «/: id»

router.get('/name/:name', (req, res, next) => {
  console.log('called name',req.params.name )
  Project.findOne({name:req.params.name}).then(results => {
    res.json({"project": results})
  })
})

router.get('/:id', (req, res, next) => {
  console.log('called id')
  Project.findOne({_id:req.params.id}).then(results => {
    res.json({"project": results})
  })
})

когда я убираю ': name', он использует имя маршрута, но когда я добавляю его обратно, он использует Id.

1 Ответ

1 голос
/ 06 марта 2019

Полагаю, вы неправильно поняли, как работают маршруты. Проверьте эту страницу mdn для получения дополнительной информации.

/name/:name будет соответствовать любому маршруту, например /name/.*, что означает, что он будет соответствовать любому, если в качестве префикса указано /name/, т.е. /name/xyz.

.

:name является PLACEHOLDER . Это означает, что все, что вы ставите после /name/, доступно для переменной req.params.name.

Теперь для вашего примера, когда вы нажимаете /name:name, он не соответствует шаблону /name/.*, поэтому он идет к следующему маршруту. /:id означает /.*, то есть фактически любой маршрут.

...