我想要一个像localhost3000/hh234due
这样的URL,它有一个唯一的id,可以路由到特定的页面,但我所做的与其他路由冲突。
如何使/:id对一个视图唯一
module.exports = function (app) {
app.get('/:id', function (req, res) {
res.render('page/index');
});
}
由于路由是按顺序测试的,请将其放在序列中的最后,与之冲突的任何内容都将优先于它。
一般来说,这只是一种有问题的做法,因为
app.get('/:id', ...)
匹配每一条可能的顶级路线,并引发与您在网站工作中想要/需要的其他顶级路线的冲突。
你可以通过总是把它作为最后一个可能的路由定义来实现它,但我建议把URL改成之类的东西
http://localhost:3000/id/hh234due
然后你可以使用:
app.get('/id/:id', ...)
并且不会与您的任何其他顶级路线发生任何冲突。
当以这种方式进行时,URL结构也更具声明性,因为/id
部分清楚地说明了这个URL是什么,而不是以前你更依赖于这样一个事实,即它看起来不像你网站上的任何其他顶级路由,所以"我想"它一定是一个id,对于未来可能在这个网站上工作的其他开发人员来说,它不是那么具有声明性或清晰。
将专用页面路由置于通用页面路由之前就足够了,如下所示:
module.exports = function (app) {
app.get('/hh234due', function (req, res) {
res.render('<your special page>');
});
app.get('/:id', function (req, res) {
res.render('page/index');
});
}