在 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 动态加载路由

Express.js 或 Angular 用于在 MEAN 应用程序中处理路由?

使用 Express JS 路由中的 Socket.io

使用 Express.js 在 Node.js 中设置路由的最佳方式

如何在 express.js 中创建注册路由?

express.js 路由模块化