일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- AndroidStudio
- 국제화
- Callback
- c:choose
- 콜백
- Java
- 동적쿼리
- c:forEach
- fullcalendar
- MVC
- mybatis
- SQL
- jQuery
- Spring
- vscode
- jsx
- JavaScript
- C#크롤링
- MySQL
- 쿼리
- react
- RequestMethod.POST
- NPM
- node.js
- iBATIS
- android
- egov
- HTTP
- JSTL
- 서드파티모듈
- Today
- Total
Today Yewon Learned
[Node.js] express 모듈을 이용한 라우팅 본문
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 |