TIL _ Node.js Express

Today 공부

  • Express.js
  • MERN stack
  • 라우팅

Express

(Node.js 환경에서 웹 서버, 또는 API 서버를 제작하기 위해 사용되는 인기 있는 프레임워크)

Express로 구현한 서버가 http 모듈로 작성한 서버와 다른 점

  • 미들웨어 추가가 편리하다
  • 자체 라우터를 제공한다

라우팅 : 메소드와 URL에 따른 분기(Routing)하기

  • 메소드와 URL(/lower, /upper 등)로 분기점을 만드는 것을 라우팅(Routing)이라고 합니다.
  • 클라이언트는 특정한 HTTP 요청 메소드나(GET, POST 등)
    서버의 특정 URI(또는 경로)로 HTTP 요청을 보냅니다.
  • 라우팅은 클라이언트의 요청에 해당하는 메소드와 Endpoint에 따라 서버가 응답하는 방법을 결정하는 것입니다.

순수한 node.js 코드

const requestHandler = (req, res) => {
  if(req.url === '/lower') {
    if (req.method === 'GET') {
      res.end(data)
    } else if (req.method === 'POST') {
      req.on('data', (req, res) => {
        // do something ...
      })
    }
  }
}

Express 프레임워크 자체에서 라우터기능 활용

const router = express.Router()
router.get('/lower', (req, res) =>{
  res.send(data)
})
router.post('/lower', (req, res) =>{
  // do something
})

Middleware

[미들웨어를 사용하는 상황]

  • 모든 요청에 대해 url이나 메소드를 확인할 때
  • POST 요청 등에 포함된 body(payload)를 구조화할 때(쉽게 얻어내고자 할 때)
  • 모든 요청/응답에 CORS 헤더를 붙여야 할 때
  • 요청 헤더에 사용자 인증 정보가 담겨있는지 확인할 때

* POST 요청 등에 포함된 body(payload)를 구조화할 때( body 얻기 )


app.use(express.json({strict: false}))
기본값이 true로 설정 되있으며, true로 설정되어있으면 배열과 객체만 허용하거나 사용하지 않도록 설정합니다.
비활성화되면 JSON.parse가 허용하는 모든 것을 허용합니다
primitive data type 도 parsing 해주도록 설정


req.body 메소드로 얻을 수 있다.


* 모든 요청/응답에 CORS 헤더를 붙일 때


순수 node.js 코드에 CORS 헤더를 붙이려면, 응답 객체의 writeHead 메소드 등을 이용합니다.
이런 메소드를 이용하더라도 Access-Control-Allow-* 헤더를 매번 재정의해야 합니다
그뿐만 아니라, OPTIONS 메소드에 대한 라우팅도 따로 구현해야 합니다.


cors 미들웨어 사용

const cors = require('cors')
app.use(cors()) // 모든 요청에 대해 CORS 허용

MERN stack

JavaScript 생태계에서 인기 있는 프레임워크인 MongoDB, Express, React, Node를 지칭하는 말


마치며,

body-parser 부분이 express 버전이 업그레이드 되면서 내장되어 사용을 하지 않고
body를 얻을 수 있게 되었는데 처음보는 용어들이 많다보니
자료를 찾고 검색하는데 시간을 꽤나 소요했었다.
요즘은 코드를 쓰다가 막히면 지레 겁먹고 코드를 쓰지 않는데 이 부분을 고쳐야겠단 생각이 든다

좋은 웹페이지 즐겨찾기