使用路由作为Express.js中另一个路由的别名

Dav*_*ian 9 alias routes node.js express

我正在Express.js的基础博客上工作.说我有这样的路线结构:

/blog/page/:page
Run Code Online (Sandbox Code Playgroud)

我还想要一条/blog基本上是别名的路线/blog/page/1.如何在Express中轻松处理?

所有路线都是这样定义的:

app.get('/path', function(req, res) {
    //logic
});
Run Code Online (Sandbox Code Playgroud)

mek*_*all 21

使用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
});
Run Code Online (Sandbox Code Playgroud)

如果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);
Run Code Online (Sandbox Code Playgroud)

  • 这将导致更改浏览器的URL.你可以使用connect-modrewrite重写url.https://github.com/tinganho/connect-modrewrite?source=c (9认同)
  • 因为这需要另一次往返.不是一个好的解决方案 (3认同)
  • 正确@einstein,但是使用快递路线时没有必要。您可以使用正则表达式进行匹配,甚至传递数组,请参见此处:http://stackoverflow.com/questions/15350025/express-js-single-routing-handler-for-multiple-routes-in-a-single-线 (2认同)