라봉이의 개발 블로그

node.js express 4. route paths 라우트 경로, route parameters 라우트 파라미터, response methods 응답 메서드 본문

Node.js/express

node.js express 4. route paths 라우트 경로, route parameters 라우트 파라미터, response methods 응답 메서드

Labhong 2018. 3. 14. 01:08
반응형

저번 포스트에서는 static filepath 객체에 대해서 알아보았다.
express가 어떻게 정적 파일(static file)과 path 객체가 무엇이고 어떻게
사용하는 지 정말 간략하게 살펴보았다.

이번 포스트는 이전 포스트에서 다루었던 router를 좀 더 살펴보도록 하겠다.

Route paths

이전에 Router는 url의 pathhttp methodhandler를 달리 할 수 있다고 설명하였다.

이 Route paths에 대해 조금 더 설명을 하고 싶었다.

express 문서를 보면 다음과 같은 구문이 있다.

"Route paths can be strings, string patterns, or regular expressions."

Route pathsstring이나 string 패턴 혹은 정규 표현식이 될 수 있다라고 써져 있다.

보통은 string 그대로 쓰면 되므로 보기 귀찮으신 분들은 이 부분은 건너 뛰셔도 된다.

예제를 보며 살펴보자.

 
// 일반적 문자열
app.get('/about', function (req, res) {
  res.send('about')
})

위의 표현은 주로 우리가 쓰는 방식인 문자열로 Route path를 정하는 방식이다.

다음과 같이 string 패턴이 사용될 수도 있다.
아래의 Route path는 /abd나 /abcd가 될 수 있다.

 
app.get('/ab?cd', function (req, res) {
  res.send('ab?cd')
})

아래의 Route path는 /abcd나 /abbcd /abbbcd가 될 수 있다.

 
app.get('/ab+cd', function (req, res) {
  res.send('ab+cd')
})

string 패턴은 ?, +, *, () 정규식 문자의 서브셋을 사용할 수 있다.
string 패턴은 아래 경로에서 사용 방법을 알 수 있다.

또한 Route paths는 정규표현식도 가능하다.

다음 식은 paths에 a가 포함된 모든 항목과 일치한다.

 
app.get(/a/, function(req, res) {
  res.send('/a/');
});

이렇듯 정규 표현식도 가능하지만 솔직히 잘 쓰이는 것은 아닌 것 같다.
(아직 가방끈이 짧아서..)

다음은 Route parameters에 대해 설명하도록 하겠다.

Route parameters

문서에는 Route parameter에 대해 다음과 같은 설명을 붙이고 있다.
"Route parameters are named URL segments that are used to capture the values specified at their position in the URL"
"Route parameter란 url안의 특정 위치에서 변수를 추출하기 위한 URL segment라고 불리는 것이다." 라고 설명하였다.

그냥 예시를 보는 것이 편할 것 같다.

예를 들어 다음과 같은 url이 서버에 도착했다고 가정하자.
http://localhost:3000/users/34/books/8989

그러면 밑의 코드가 캐치하게 된다.

app.get('/users/:userId/books/:bookId', function (req, res) {
  res.send(req.params)  //  { "userId": "34", "bookId": "8989" }
})

딱 보면 알듯이 특정 user의 번호특정 책의 번호주기 위한 url이며
그 url에서 특정 변수를 추출해내서 사용할 수 있다.

변수 이름은 위와 같이 :변수명 을 이용해서 추출할 수 있다.

또한 하이픈(-)점(.)은 문자 그대로 해석되기 때문에 유용하게 사용할 수 있다.

 
Route path: /flights/:from-:to
Request URL: http://localhost:3000/flights/LAX-SFO
req.params: { "from": "LAX", "to": "SFO" }

Route path: /plantae/:genus.:species
Request URL: http://localhost:3000/plantae/Prunus.persica
req.params: { "genus": "Prunus", "species": "persica" }


이렇게 Route path에 대해서 주구장창 설명하는 이유는
url을 어떻게 만드는 지도 서비스를 구성하는 데에 필요하기 때문이다.
(일을 직접 해보지는 않았지만...)

Route parameters는 많이 쓰이는 것 같다.
그러니 잘 알아두도록 하자.

Response methods

Response 객체(res)의 methods는 클라이언트에게 어떤 방식으로 응답을 제공하는 지에 대한 메서드를 의미합니다.

다음 메서드 중 어느 하나도 호출되지 않는 경우, timeout 시간이 될 때까지 클라이언트 요청은 정지된 채로 방치됩니다.

 메소드

설명 

 res.download() 

 파일이 다운로드되도록 프롬프트합니다.

 res.end() 

 응답 프로세스를 종료합니다.

 res.json()

 JSON 응답을 전송합니다.

 res.jsonp()

 JSONP 지원을 통해 JSON 응답을 전송합니다.

 res.redirect()

 요청의 경로를 재지정합니다.

 res.render()

 보기 템플리트를 렌더링합니다.

 res.send()

 다양한 유형의 응답을 전송합니다.

 res.sendFile()

 파일을 옥텟 스트림의 형태로 전송합니다.

 res.sendStatus()

 응답 상태 코드를 설정한 후 해당 코드를 문자열로 표현한 내용을 응답 본문으로서 전송합니다.



다음 포스트에서는 middleware란 무엇이며 어떻게 쓰는 것인지에 대해 알아보도록 하자.


반응형
Comments