Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Express JS反向URL路由(Django样式)_Node.js_Routing_Express - Fatal编程技术网

Node.js Express JS反向URL路由(Django样式)

Node.js Express JS反向URL路由(Django样式),node.js,routing,express,Node.js,Routing,Express,我使用的是expressjs,我想要一个类似于Django的reverse函数的功能。例如,如果我有一条路线 app.get('/users/:id/:name', function(req, res) { /* some code */ } ) reverse('/users/:id/:name', 15, 'John'); 我想用一个函数作为例子 app.get('/users/:id/:name', function(req, res) { /* some code */ } ) r

我使用的是expressjs,我想要一个类似于Django的
reverse
函数的功能。例如,如果我有一条路线

app.get('/users/:id/:name', function(req, res) { /* some code */ } )
reverse('/users/:id/:name', 15, 'John');
我想用一个函数作为例子

app.get('/users/:id/:name', function(req, res) { /* some code */ } )
reverse('/users/:id/:name', 15, 'John');
甚至更好

reverse('/users/:id/:name', { id : 15, name : 'John' });
这将为我提供url
/users/15/John
。这种功能存在吗?如果没有,那么您是否知道如何编写此类函数(考虑Express的“路由算法”)

以下是您的代码:

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?', {});

我刚刚创建了一个包,它解决了路由的其他问题

自述文件中的示例:

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})

我考虑过类似的事情(实际上我实现了这个简单的例子),但不幸的是Express使用了
作为特殊字符。这使得事情变得有点复杂,因为对于url
/users/:id?
而言,
/users
/users/1
都匹配它。这就是你想要的吗?是的,我想那就行了。谢谢这不是反向路由,之所以要执行反向路由,是因为用户可能会重新定义URL结构。例如,在Django中,反向路由是通过提供视图名称和参数来完成的,而这些名称和参数又提供了一个URL。在这里,反向意味着,如果重新构造URL,链接将继续工作。您的示例直接使用URL,只不过是一个URL生成器,这是反向路由的核心。创建
name:url
映射非常简单。