在URL路径的开头表示参数的快速路由器订购

时间:2019-06-12 02:20:07

标签: node.js express

我正在使用express,并且我希望拥有这样的用户个人资料网址:example.com/:username

但是,我仍然需要其他URL,例如example.com/login和example.com/view/:id

如果我这样订购路由器,则在将请求发送到example.com/login时,它将“登录”视为用户名:

router.get('/:username', function (req, res, next) {
  res.render('profile', {data: req.params.username});
})

router.get('/login', function (req, res, next) {
  res.render('login', {data: null});
})

router.get('/view/:id', function (req, res, next) {
  res.render('view', {data: req.params.id});
})

如果我将/:username路由器放在最后,则一切正常。但是,如果有人去了example.com/view(没有ID),则我需要它发送一个错误,即视图控制器未收到ID。相反,它再次将其视为用户名,并发送错误消息,指出该用户名不存在。

解决此问题的最干净方法是什么?我是否只需要为所有基本URL路径添加路由器? (这样的事情):

router.get('/login', function (req, res, next) {
  res.render('login', {data: null});
})

router.get('/view/:id', function (req, res, next) {
  res.render('view', {data: req.params.id});
})

router.get('/view', function (req, res, next) {
  res.render('viewError', {data: null});
})

router.get('/:username', function (req, res, next) {
  res.render('profile', {data: req.params.username});
})

1 个答案:

答案 0 :(得分:0)

我不完全确定这是否是正确的方法,但是再次听起来这可能是我可能遇到的事情,我希望可以通过这种方法解决它,直到找到更好的解决方案为止。

以下解决方案对路径格式protoc使用单一路由,无论是登录名,查看名还是任何用户名,因此您可以输入简单的if-else-if或进行切换以将控制权交给各个控制器,或者只是简单地渲染一个视图即可。这样,处理顺序完全没有关系。

/:value