有没有可能在Express.js中命名路线

基本路线是这样的:

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

是否有可能命名该路线,并在任何模板中可用,以便可以这样使用它:

 app.get('/', name="index", function(req, res){ res.send('hello world'); }); Go to site <a href="{% url index %}">index page</a>. 

灵感来自Django 🙂

对此没有开箱的机制。 然而,你可以像这样模仿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创build机制。 另一方面你可以修改url函数并扩展它。 我不想在这里详述所有的细节,但是这里是一个如何使用正则expression式的例子(你应该能够把它们结合起来):

Express JS反向URL路由(Django风格)

请注意,我发布了这个问题,所以前段时间我也有同样的问题。 :d

我发现快速反向很好地解决这个问题

https://github.com/dizlexik/express-reverse

它增加了标准路由,允许您将路由名称作为第一个parameter passing

 app.get('test', '/hello/:x', function(req, res, next) { res.end('hello ' + req.params.x); }); 

让您按名称从模板内部构buildurl

 <a href="<%= url('test', { x: 'world' }) %>">Test</a> 

让您通过名称redirect到一个url

 app.get('/test-redirect', function(req, res, next) { res.redirectToRoute('test', { x: 'world' }); }); 

我有同样的问题,并决定build立一个图书馆来帮助我。

除了不硬编码你的路由,它允许我build立导航组件像面包屑,我可以使用它的服务器端快递或客户端与骨干或任何。

https://github.com/hrajchert/express-shared-routes

我这是你正在寻找的东西: 命名的路线

示例代码:

 var express = require('express'); var app = express(); var Router = require('named-routes'); var router = new Router(); router.extendExpress(app); router.registerAppHelpers(app); app.get('/admin/user/:id', 'admin.user.edit', function(req, res, next){ // for POST, PUT, DELETE, etc. replace 'get' with 'post', 'put', 'delete', etc. //... implementation // the names can also be accessed here: var url = app.namedRoutes.build('admin.user.edit', {id: 2}); // /admin/user/2 // the name of the current route can be found at req.route.name }); app.listen(3000); 

正如您所看到的,您可以将路由命名为admin.user.edit并在您的视图中访问它