2012-04-05 17 views
5

Express JS kullanıyorum ve Django'nun reverse işlevine benzer bir işlev istiyorum. Ben örnekExpress JS ters URL yolu (Django stili)

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

için, bir rota varsa Yani örneğin

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

veya daha iyi bir işlevi kullanmak istiyorum

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

bana url verecek olan /users/15/John . Böyle bir işlev var mı? Ve eğer değilse o zaman böyle bir işlevin nasıl yazılacağı konusunda bir fikriniz var mı (Express 'yönlendirme algoritması dikkate alınarak)? Sadece yönlendirme için diğer sorunlar birlikte bu çözer paketi reversable-router oluşturduk

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

cevap

7

İşte kodudur. Benioku'da gelen

Örnek:

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

böyle bir şey düşündü (ve aslında bu basit durumda uygulamak did), ancak unfortunetly Ekspres 'kullandığı' özel karakter olarak?. Bu, işleri biraz daha karmaşık hale getirir, çünkü url '/ users /: id?' Için ''/users' ve '/ users/1' her ikisi de eşleşir. – freakish

+0

Güncellendi. İstediğin bu mu? – cababunga

+0

Evet, bence bu iş yapacak. Teşekkürler! – freakish