2011년 8월 10일 수요일

[Node.JS+Express] Routing

Express에서 Routing이란 용어는 URL과 View를 매칭시키는 거라고 정의할 수 있을 것 같다. Route라는 말 그대로 특정 URL를 특정 View로 '분배'시키는 역활이다. 이번에는 이 라우팅에 대해 간략이 소개한다.

URL이라 표현하였지만, 정확히 말하자면 호스트 이름을 제외한 경로 등을 표시한 문자이다. 예를 들어 http://localhost:3000/view/123 이라는 URL로 접속을 하게 되면 Routing 대상은 /view/123 이라는 문자열이 된다.

일반적으로 다음 식으로 사용된다.
app.get('/', function(req, res) {
  res.render('index.jade');
});
app.get 이라는 함수는 GET Method로 들어오는 경로를 연결시킨다. 지정된 경로는 '/'이므로 특별히 아무 내용을 붙이지 않았을 경우이다. 내용에서 req는 RequestObject이고 res는 ResponseObject 이다. 그리고 ResponseObject에 render라는 메서드로 뷰를 렌더링한다. 렌더링할 내용은 index.jade이고 이는 Jade Template으로 표현된 HTML식을 구현하는 코드다.

get이라는 이름에서 추측할 수 있겠지만, get대신 post를 써서 POST Method일 경우도 처리할 수 있다. POST 방식의 경우 Express Configuration에서 bodyParser를 포함시키면 RequestObject의 body를 통해 각 Form Item의 값을 읽을 수 있다.
app.post('/post', function(req, res) {
  res.render('write.jade', {
    id: req.body.id,
    name: req.body.name
});
write.jade로 렌더링을 하면서 id, name이라는 Form의 Item으로 넘어온 값을 엑세스 하는 예제이다. 렌더링 시 넘겨지는 패러미터는 Jade Template의 내용을 알아야 사용이 가능하나 지금은 생략한다.

app.get, app.post의 첫 번째 패러미터에는 정규표현식 등 특정 구문 표현식을 사용할 수 있다.
app.get('/view/:id', function(req, res) {
  var id = req.params.id;
  ...
});
이 경우 http://localhost:3000/view/123 이라는 식으로 호출을 했다면 req.params.id에는 123이라는 문자열이 들어가게 된다.

정규표현식을 사용하는 경우는
app.get('\/user\/(^\/]+)\/?', function(req, res) {
  var parameter = req.params[0];
  ...
});
이와 같이 특정한 이름이 없기 때문에 RequestObject의 params에 배열 형태로 전송된다.

만약 methodOverride 를 설정에 추가한 경우라면 get, post 말고도 put 등의 REST 방식의 메서드도 사용할 수 있게 된다. REST API도 많이 쓰이는 방식이 만큼 알아두면 쓸모가 많을 것 같다.

댓글 없음 :