【问题标题】:Use a route as an alias for another route in Express.js在 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
});

【问题讨论】:

    标签: node.js routes express alias


    【解决方案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 但是在使用快速路线时没有必要。您可以使用正则表达式来匹配,甚至传递一个数组,请参见此处:stackoverflow.com/questions/15350025/…
    • 投反对票,因为这需要另一次往返。不是一个好的解决方案。
    • @LuckySoni 添加了共享路由处理程序方法,如果需要,可以摆脱重定向。
    • @LuckySoni 哈基?只是解决问题的不同解决方案。由于可读性,我更喜欢定义单独的路由,但我也添加了组合路由定义。现在开心吗?
    猜你喜欢
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多