在 Express.js 中使用一个路由作为另一个路由的别名
Posted
技术标签:
【中文标题】在 Express.js 中使用一个路由作为另一个路由的别名【英文标题】:Use a route as an alias for another route in Express.js 【发布时间】:2012-12-17 03:16:44 【问题描述】:我正在使用 Express.js 编写一个基本博客。假设我有这样的路线结构:
/blog/page/:page
我还想要一个/blog
路由,它本质上是/blog/page/1
的别名。如何在 Express 中轻松处理?
所有路由都是这样定义的:
app.get('/path', function(req, res)
//logic
);
【问题讨论】:
【参考方案1】:使用res.redirect
告诉浏览器重定向到/blog/page/1
:
app.get('/blog', function(req, res)
res.redirect('/blog/page/1');
);
app.get('/blog/page/:page', function(req, res)
//logic
);
如果没有传递page
参数,则使用共享路由处理程序并默认为第 1 页:
function blogPageHandler(req, res)
var page = req.params.page || 1;
//logic
// Define separate routes
app.get('/blog/page/:page', blogPageHandler);
app.get('/', blogPage);
// or combined, by passing an array
app.get(['/', '/blog/page/:page'], blogPageHandler);
// or using optional regex matching (this is not recommended)
app.get('/:_(blog/)?:_(page/)?:page([0-9]+)?', blogPageHandler);
【讨论】:
这会导致浏览器的url发生变化。您可以改用 connect-modrewrite 来重写 url。 github.com/tinganho/connect-modrewrite?source=c 正确@einstein 但是在使用快速路线时没有必要。您可以使用正则表达式来匹配,甚至传递一个数组,请参见此处:***.com/questions/15350025/… 投反对票,因为这需要另一次往返。不是一个好的解决方案。 @LuckySoni 添加了共享路由处理程序方法,如果需要,可以摆脱重定向。 @LuckySoni 哈基?只是解决问题的不同解决方案。由于可读性,我更喜欢定义单独的路由,但我也添加了组合路由定义。现在开心吗?以上是关于在 Express.js 中使用一个路由作为另一个路由的别名的主要内容,如果未能解决你的问题,请参考以下文章
Express.js 或 Angular 用于在 MEAN 应用程序中处理路由?