【问题标题】:Express JS reverse URL route (Django style)Express JS 反向 URL 路由(Django 风格)
【发布时间】:2012-04-19 03:10:35
【问题描述】:

我正在使用 Express JS,我想要一个类似于 Django 的 reverse 函数的功能。所以如果我有一条路线,例如

app.get('/users/:id/:name', function(req, res) { /* some code */ } )

我想用一个函数来举例

reverse('/users/:id/:name', 15, 'John');

甚至更好

reverse('/users/:id/:name', { id : 15, name : 'John' });

这会给我网址/users/15/John。有这样的功能吗?如果没有,那么您有什么想法如何编写这样的函数(考虑 Express 的路由算法)?

【问题讨论】:

    标签: node.js routing express


    【解决方案1】:

    这是您的代码:

    function reverse(url, obj) { 
        return url.replace(/(\/:\w+\??)/g, function (m, c) { 
            c=c.replace(/[/:?]/g, ''); 
            return obj[c] ? '/' + obj[c] : ""; 
        }); 
    }
    
    reverse('/users/:id/:name', { id: 15, name: 'John' });
    reverse('/users/:id?', { id: 15});
    reverse('/users/:id?', {});
    

    【讨论】:

    • 我想过这样的事情(实际上我确实实现了这个简单的案例),但不幸的是 Express 使用 ? 作为特殊字符。这让事情变得有点复杂,因为对于 url /users/:id?/users/users/1 都匹配它。
    • 已更新。这就是你想要的吗?
    • 是的,我认为这样就可以了。谢谢!
    • 这不是反向路由,之所以要做反向路由是因为用户可能会重新定义 URL 结构。例如。在 Django 中,反向路由是通过给出 视图的名称 和参数来完成的,而参数又给出了一个 URL。反向意味着在这里,如果一个人重组 url,链接会继续工作。您的示例直接使用 URL,只不过是一个 URL 构建器。
    • @Ciantic 这是反向路由的核心。创建name:url 映射很简单。
    【解决方案2】:

    我刚刚创建了包reversable-router,它解决了路由的其他问题。

    自述文件中的示例:

    app.get('/admin/user/:id', 'admin.user.edit', function(req, res, next){
        //...
    });
    
    //.. and a helper in the view files:
    url('admin.user.edit', {id: 2})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-14
      • 2017-04-11
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      相关资源
      最近更新 更多