是否可以在Express.js中命名路由

Ale*_*nko 8 node.js express

基本路线是这样的:

app.get('/', function(req, res){
  res.send('hello world');
});
Run Code Online (Sandbox Code Playgroud)

是否可以命名该路线并使其在任何模板中可用,因此可以像这样使用:

app.get('/', name="index", function(req, res){
  res.send('hello world');
});

Go to site <a href="{% url index %}">index page</a>.
Run Code Online (Sandbox Code Playgroud)

灵感来自Django :)

fre*_*ish 13

没有开箱即用的机制.但是你可以像这样模仿Django的风格:定义urls.js一个包含一系列URL的文件.首先从:

myviews.js

exports.Index = function( req, res, next ) {
    res.send( "hello world!" );
};
Run Code Online (Sandbox Code Playgroud)

urls.js

var MyViews = require( "mywviews.js" );

module.exports = [
    { name : "index", pattern : "/", view : MyViews.Index }
]
Run Code Online (Sandbox Code Playgroud)

现在在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 );
};
Run Code Online (Sandbox Code Playgroud)

现在您可以定义自定义帮助程序(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;
        }
    };
};
Run Code Online (Sandbox Code Playgroud)

并且您可以在模板中轻松使用它.现在的问题是,它没有像Django那样为您提供花哨的URL创建机制(您可以在其中传递其他参数url).另一方面,您可以修改url功能并扩展它.我不想在这里详细介绍所有细节,但这里是一个如何使用正则表达式的示例(您应该能够将这些结合到一起):

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

请注意,我发布了这个问题,所以我前段时间遇到了同样的问题.:d

  • 关键在于,您可以在不更改所有模板中的字符串的情况下更改网址.硬编码网址很糟糕;) (9认同)