Node.js Express JS反向URL路由(Django样式)
我使用的是expressjs,我想要一个类似于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
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
映射非常简单。