2012-04-05 4 views
5

Express JS를 사용 중이며 장고의 reverse 기능과 비슷한 기능을 원합니다. 내가 예를Express JS 역 URL 경로 (Django 스타일)

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

를 들어, 경로가 있다면 그래서 예를

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

또는 더 나은 기능을 사용하고 싶습니다

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

나에게 URL을 줄 것이다 /users/15/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

여기에 코드입니다. 추가 정보에서

예 :

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는'사용'특수 문자로?. 이것은'/ users/: id? 'URL에 대해'/ users'와'/ users/1'가 모두 일치하기 때문에 상황을 좀 더 복잡하게 만듭니다. – freakish

+0

업데이트 됨. 너가 원하는게 그거야? – cababunga

+0

그래, 그 일을 할 것 같아. 감사! – freakish