NodeJS - express

express에 대해서

Posted by Yan on January 25, 2021

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: 라우트가 일치할 때 실행되는 함수
  1. express는 일반적으로 다음 두 문장으로 시작한다.

    1
    2
    
    const express = require("express");
    const app = express();
    

    여기서 express와 app은 다른 변수로 써도 되지만 거의 이렇게 쓰인다.

  2. app.listen 으로 port번호를 지정할 수 있다.

    1
    2
    3
    
    app.listen(3000, () => {
      console.log("Listening on port 3000!");
    });
    
  3. 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

  • 파일의 변화를 지켜보다가 변화가 있으면 업데이트 시켜줌
  • 매번 서버를 종료시켰다가 다시 실행시키지 않아도 된다.