Creating Servers With Express
Express
- node 패키지로, 자체적인 최소한의 기능을 갖춘 라우팅 및 미들웨어 웹 프레임워크.
- request를 들을 수 있는 서버를 만든다.
- request를 parse할 수 있다. 그리고 request들을 특정한 route로 match시킨다.
- http response를 만들고 내용과 연관시킨다.
library와 framework의 차이
library : 원하는 부분에서 코드를 연결시킬 수 있다. 내가 flow를 제어한다.
- ex) axios
framework : framework가 정해놓은 structure, flow 속에서 내가 사용한다.
- ex) express
Routing
-
라우팅은 URI(또는 경로) 및 특정한 HTTP 요청 메소드의 특정 엔드포인트에 대한 클라이언트 요청에 -> 애플리케이션이 응답하는 방법을 결정하는 것
-
각 라우트는 하나 이상의 핸들러 함수를 가질 수 있다. 이러한 함수는 라우트가 일치할 때 실행된다.
app.METHOD(PATH, HANDLER)
- app: express의 인스턴스
- METHOD: HTTP 요청 메소드
- PATH: 서버에서의 경로
- HANDLER: 라우트가 일치할 때 실행되는 함수
-
express는 일반적으로 다음 두 문장으로 시작한다.
1 2
const express = require("express"); const app = express();
여기서 express와 app은 다른 변수로 써도 되지만 거의 이렇게 쓰인다.
-
app.listen 으로 port번호를 지정할 수 있다.
1 2 3
app.listen(3000, () => { console.log("Listening on port 3000!"); });
-
app.use 로 모든 request를 받는다.
1 2 3 4 5
app.use(() => { console.log("We got a new request!"); res.send("Hello, we got your request!"); //"Hello, we got your request!"는 브리우저에 드러난다. });
app.use((req, res) => )
- http request는 자바스크립트 객체가 아니다. text 정보다.
- 받게 되는 request에는 http의 header 등의 정보가 들어있다. header에는 content-length, connection, date, content-type등의 정보가 들어있다.
- express는 http request를 parsing하고 callback 함수에 첫번째 인자로 보낸다.
- res.send 로 response를 보낸다.
GET method
app.get 으로 request를 받는다.
예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const express = require("express");
const app = express();
app.get("/", (req, res) => {
res.send("This is the home page!");
//localhost:8080
});
app.get("/cats", (req, res) => {
res.send("Meow!");
//localhost:8080/cats
});
app.get("/dogs", (req, res) => {
res.send("Woof!");
//localhost:8080/dogs
});
app.listen(8080, () => {
console.log("Listening on port 8080!");
});
- 참고) /는 root라는 뜻.
- 주의) app.get(‘*’, (req, res) => function)는 모든 사항을 포함한다는 뜻인데, 다른 app.get위에 쓰이면 다른 app.get을 무력화시킨다. *의 function만 실행된다.
POST method
app.post 로 request를 받는다.
path parameter
- path를 ‘:params’로 넣으면 어떤 param이 와도 해당 res.send로 받는다.
1 2 3 4 5 6 7
app.get("/r/:category/:postId", (req, res) => { const { category, postId } = req.params; console.log(res.params); res.send("This is category!"); //localhost:8080/r/tango/abir123 //console의 결과는 {category: 'tango', postId: 'abir123'} });
querystring
1
2
3
4
5
6
7
app.get("/r/search", (req, res) => {
const { q } = req;
console.log(res.query);
res.send("This is search result!");
//localhost:8080/r/search/q=cats
//console의 결과는 {query: cats}
});
nodemon
npm i nodemon
- 파일의 변화를 지켜보다가 변화가 있으면 업데이트 시켜줌
- 매번 서버를 종료시켰다가 다시 실행시키지 않아도 된다.