2012-10-12 4 views
5

基本路線で名前のルートにそれが可能である。このようなものです:は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>. 

インスピレーションは、ジャンゴから来ている:)

+0

一貫した命名のために[express-resource](https://github.com/visionmedia/express-resource)を見て、機関車がどのように[urlFor](http: /locomotivejs.org/guide/datastores.html)。 –

+0

この問題に戻る場合は、[Shrinkroute](http://npmjs.org/package/shrinkroute)をご覧ください。これは積極的に維持され、Express 3で動作します。 – gustavohenke

+0

Django ['{%url%}'](https://docs.djangoproject.com/ja/dev/ref/templates/builtins/#url)テンプレートタグ:) –

答えて

9

そのためのボックスメカニズムのないうちはありません。しかし、そのようなDjangoのスタイルを模倣することができます:URLの配列を保持するurls.jsファイルを定義します。

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

module.exports = [ 
    { name : "index", pattern : "/", view : MyViews.Index } 
] 

exports.Index = function(req, res, next) { 
    res.send("hello world!"); 
}; 

urls.js今すぐapp.js(または任意のメインファイルがある)で必要に

myviews.js:ファーストで始まりますエクスプレスにURLをバインドする

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

今、あなたはカスタムヘルパー(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

+1

このすべてのポイントは何ですか? – chovy

+6

これは、すべてのテンプレートの文字列を変更せずにURLを変更できるということです。 )難しいコードURLには悪いです;) – Aleksandrenko

+0

フリークシ:ありがとう、私は私のアプリを書いて始めます。 私はどのように私のアプリケーションを構造化するのか分かりませんが、何かdjangoのアプリ構造を作ることは可能です。 – Aleksandrenko

1

私は同じ問題を抱えていて、私を助けるライブラリを作ることに決めました。

あなたのルートをハードコーディングするのではなく、ブレッドクラムのようなナビゲーションコンポーネントを構築することができます。また、バックボーンなどで明示的にまたはクライアント側で使用することができます。

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

+0

興味深い:玉の中で名前付きルートをどのように使用していますか?たとえば、次のようなフォームでは: 'form(action = '???' method = 'post' role = 'form' class = 'form-horizo​​ntal')' – Pathros

+0

私は自分自身を作成し​​ます。前:Dワウタイムフライ。 https://www.npmjs.com/package/urls – Aleksandrenko

4

私はそれはあなたが最初の引数として

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

をルートの名前を渡すことができ、ルーティング基準を強化し、うまくこの問題を解決するために

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

急行-逆を見つけましたテンプレート内からURLを作成しましょう。

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

あなたは、これはあなたが探しているものである名前

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

この問題は 'express.Router()'が動作しないので、 'router.route( '/ url')を使うことができません。get ).post()。put() '、**かなり**便利です –

0

私の事でURLにリダイレクトしてみましょう:あなたが見ることができるように

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

Named routes

サンプルコードルートにadmin.user.editと名前を付けて、ビューにアクセスしてください。