[CS] Node.js Express Day-31

cptkuk91·2021년 11월 29일
0

CS

목록 보기
58/139

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

Express framework는 npm을 통해 다운로드 할 수 있고 http 모듈로 작성한 것과 달리 미들웨어 추가가 편리하고, 자체 라우터를 제공합니다.

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

메소드와 URL(/lower, /upper 등)로 분기점을 만드는 것을 라우팅(Routing)이라고 합니다.

ex) 순수 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 ...
      })
    }
  }
}

ex) Express의 라우터를 활용한 예시

const router = express.Router()

router.get('/lower', (req, res) =>{
  res.send(data)
})

router.post('/lower', (req, res) =>{
  // do something
})

Middleware

미들웨어는 request에 필요한 기능을 더하거나, 문제가 발견 된 부분을 걷어냅니다. 미들웨어는 Express의 가장 큰 장점 중 하나입니다.

자주 사용하는 미들웨어

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

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

ex) 순수 Node.js 예시

let body = [];
request.on('data', (chunk) => {
  body.push(chunk);
}).on('end', () => {
  body = Buffer.concat(body).toString();
  // body 변수에는 문자열 형태로 payload가 담겨져 있습니다.
});

ex) bodyParser를 이용해 요청받은 데이터를 json 형태로 변환

const jsonParser = express.json()

// 생략
app.post('/api/users', jsonParser, function (req, res) {
  // req.body에는 JSON의 형태로 payload가 담겨져 있습니다.
})

Express에서는 CORS처리를 상당히 쉽게 할 수 있다.

ex) 순수 Node.js에서는 헤더를 매번 재정의해야 하고 OPTIONS 메소드에 대한 라우팅도 구현해야 한다.

const defaultCorsHeader = {
  'Access-Control-Allow-Origin': '*',
  'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
  'Access-Control-Allow-Headers': 'Content-Type, Accept',
  'Access-Control-Max-Age': 10
};

// 생략
if (req.method === 'OPTIONS') {
  res.writeHead(201, defaultCorsHeader);
  res.end()
}

하지만 우리는 Express.js를 사용할 수 있고 cors 미들웨어를 통해 간단히 처리할 수 있다.

ex) cors 모듈을 이용해 간단하게 처리

const cors = require('cors')

// 생략
app.use(cors()) // 모든 요청에 대해 CORS 허용

미들웨어 작동 원리 이해하기

기본 문법에 대해서 알아보자.

var express = require('express');
var app = express();

app.get('/', function(req, res, next){
	next();
})

app.listen(3000);

req, res는 (request, response)이고 next는 다음 미들웨어를 실행합니다. 위 예시에서 미들웨어 내부는 아무 작업을 하지 않고 있으며, next()를 통해서 다음 미들웨어로 데이터를 전달하고 있습니다.

profile
메일은 매일 확인하고 있습니다. 궁금하신 부분이나 틀린 부분에 대한 지적사항이 있으시다면 언제든 편하게 연락 부탁드려요 :)

0개의 댓글