2012-04-05 13 views
5

私はExpress JSを使用していますが、Djangoのreverse機能に似た機能が必要です。私はルートを持っているのであれば、例えば、Express JSの逆URLルート(Djangoスタイル)

app.get('/users/:id/:name', function(req, res) { /* some code */ }) 

のために私は例

reverse('/users/:id/:name', 15, 'John'); 

かさえ私にURL /users/15/Johnを与えるであろう

reverse('/users/:id/:name', { id : 15, name : 'John' }); 

よりよいのための機能を使用したいです。そのような機能は存在しますか?そうでない場合は、そのような関数を書く方法を知っていますか(Expressのルーティングアルゴリズムを考慮して)?私はちょうどルーティングのための他の問題に沿ってこれを解決したパッケージ reversable-routerを作成しました

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?', {}); 

答えて

7

はここにあなたのコードです。 readmeファイルから

例:

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}) 
+0

私はこのような何かについて考えた(そして実際に私はこの単純なケースを実装していた)が、unfortunetly Expressは ''を使用しています特殊文字として?。これは、URLの '/ users /:id?'の '/ users'と'/users/1'の両方にマッチするので、少し複雑になります。 – freakish

+0

更新。それはあなたが欲しいものですか? – cababunga

+0

ええ、私はそれが仕事をすると思います。ありがとう! – freakish

関連する問題