我正在考虑在我的下一个node.js项目中使用Express框架。然而,对我来说,一个绊脚石是没有像大多数其他非基于Sinatra的框架那样的路由生成,例如Django,Flask,Rails等。
我尝试寻找一些Connect中间件来完成我的任务,我确实找到了Barista,Escort,Sherpa等等,但是看着他们的GitHub页面,所有这些都显得已经死亡和活跃。因此,我不想为了显而易见的原因而寻找不再维护的东西。
我主要担心的是项目可能会变得非常大,每当商业和/或美学要求发生变化时,更新每个页面中的URL都会很麻烦。
在docs / tests中我有没有看到的东西?如果没有,那么如何在Express中扩展路由框架以进行URL生成,并在我的视图和控制器函数中使这个包装器可用?
更新:(2012年3月22日)我找到了这个页面:https://github.com/clyfe/tweet_express/wiki/TODO,它指定了一些做URL生成的路由器,偶然发现了也可以与express接口的护送路由器。
答案 0 :(得分:14)
或坚持使用快递并使用包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})
答案 1 :(得分:10)
您可以尝试使用Express构建的Locomotive。
它比路线生成做得更多。来自文档:“机车带来了额外的基于MVC的结构,用于架构更大的应用程序,同时利用Express和Connect中间件的强大功能。”
Locomotive's router generates helpers可自动提供给控制器和视图。
答案 2 :(得分:0)
没有开箱即用的机制。但是,您可以模仿Django的样式:定义urls.js
文件,该文件将包含URL数组。首先开始:
myviews.js
exports.Index = function( req, res, next ) {
res.send( "hello world!" );
};
urls.js
var MyViews = require( "mywviews.js" );
module.exports = [
{ name : "index", pattern : "/", view : MyViews.Index }
]
现在在 app.js (或任何主文件)中,您需要将URL绑定到Express。例如这样的
app.js
var urls = require( "urls.js" );
for ( var i = 0, l = urls.length; i < l; i++ ) {
var url = urls[ i ];
app.all( url.pattern, url.view );
};
现在您可以定义自定义帮助程序(Express 3.0样式):
var urls = require( "urls.js" ), l = urls.length;
app.locals.url = function( name ) {
for ( var i = 0; i < l; i++ ) {
var url = urls[ i ];
if ( url.name === name ) {
return url.pattern;
}
};
};
,您可以轻松地在模板中使用它。现在的问题是,它没有像Django中那样为您提供精美的URL创建机制(您可以在其中将其他参数传递给url
)。另一方面,您可以修改url
函数并将其扩展。我不想在这里讨论所有细节,但是这是一个如何使用正则表达式的示例(您应该能够将它们与思想结合在一起):
Express JS reverse URL route (Django style)
请注意,我发布了问题,所以前段时间我遇到了同样的问题。 :D