Today Yewon Learned

[Node.js] express 모듈을 이용한 라우팅 본문

javascript/Node.js

[Node.js] express 모듈을 이용한 라우팅

데브워니 2021. 12. 15. 11:32
app.get('/users/:id', (request, response) => {
    console.log(request.params);
    //const userName = users[request.params.id - 1];
    //response.end(`<h1>${userName}</h1>`);
});

Express 모듈

- 서드 파티 모듈 (다른 개발자나 회사에서 공개해둔 모듈)

- Node.js 는 자바스크립트 실행환경

- Express모듈은 Node.js에서 실행될 서버 프로그램을 간편하게 만들 수 있게 해주는 프레임워크

- Express를 사용하면, 서버 프로그램이 갖춰야하는 기능을 편하게 구현할 수 있음

 

Express 모듈 설치방법

- npm : Node Package Manager 의 줄임말로 서드 파티 모듈을 설치할 때 사용하는 프로그램

 

//서드파티 모듈 express 사용하기
const http = require('http');

const express = require('express');

const app = express(); //express 모듈의 객체는 거의 app이라는 이름을 붙임

const users = ['Tom', 'Andy', 'Jessica', 'Paul']; // const

app.get('/', (request, response) => {
    response.end('<h1>Welcome!</h1>');
});

app.get('/users', (request, response) => {
    response.end(`<h1>${users}</h1>`);
});

app.get('/users/:id', (request, response) => {
    const userName = users[request.params.id - 1];
    response.end(`<h1>${userName}</h1>`);
});

app.get('*', (request, response) => {
    response.end('<h1>Page Not Available</h1>');
});

app.listen(3000);

 

 

/users/:id 표기법

- :id위치에 오는 값을 request.params.id 객체의 속성에 담으라는 의미 (Express 표기법)

- 예를들어 서버에서 127.0.0.1:3000/users/1 을 실행하면, Node.js의 terminal에 id속성이 표기된다.

결과)

 

 

라우팅을 할 때 *(별표,asterick) 기호의 의미

app.get('*', (request, response) => {
  response.end('<h1>Page Not Available</h1>');
});

- 이 표시는 '나머지 모든 URL'을 의미,  즉 여기서 path가 들어가야 할 자리에 들어간 *모든 path를 의미

하지만 이 코드를 실행해보면

  • /
  • /users
  • /users/2

이런 URL에 대해서는 정상적인 페이지를 보여주고, 그 밖의 모든 URL에 대해서만 'Page Not Available'을 출력하는데요. 제 설명대로라면 *는 모든 URL을 나타내니까 어떤 path든 상관없이 항상 'Page Not Available'을 출력해야 할 것 같은데 이상합니다.

 

그 이유는,

 

(1) /,

(2) /users,

(3) /users/:id,

(4) *

 

위 코드에서 이 순서대로 각 path에 대한 처리를 하고 있습니다.

이 순서에는 중요한 의미가 있습니다. 그건 바로 클라이언트의 요청이 왔을 때 제 코드는 path가

 

(1) '/' 인지 확인,

(2) '/users' 인지 확인,

(3) '/users' 뒤에 '/어떤 문자열'이 붙은 형태인지 확인하고

(4) 그다음에야 *를 보고 그 외의 모든 path에 대해서 'Page Not Available'을 출력하기 때문입니다.

 

그래서 모든 경우에 'Page Not Available'이 보였던 것은 아닌 겁니다.

 

 

만약, 아래의 코드와 같이

app.get('*', (request, response) => { // 맨 위로 올림
  response.end('<h1>Page Not Available</h1>');
});

app.get('/', (request, response) => {
  response.end('<h1>Welcome!</h1>');
});

app.get('/users', (request, response) => {
  response.end(`<h1>${users}</h1>`);
});

app.get('/users/:id', (request, response) => {
  const userName = users[request.params.id - 1];
  response.end(`<h1>${userName}</h1>`);
});

* path 에 관한 라우팅 코드를 가장 첫 번째로 이동시키면,

나머지 path에 대한 요청을 보내더라도 항상 Page Not Available만 응답으로 보내게 될 것임

'javascript > Node.js' 카테고리의 다른 글

[Node.js] 서드파티 모듈  (0) 2021.12.15
[Node.js] 라우팅(Routing)  (0) 2021.12.08
[Node.js] URL , Domain Name  (0) 2021.12.07
[Node.js] 초간단 웹 서버 제작  (0) 2021.12.07
[Node.js] 서버와 클라이언트  (0) 2021.12.04
Comments