Express.js는 Node.js 환경에서 웹 서버, 또는 API 서버를 제작하기 위해 사용되는 인기 있는 프레임워크입니다.
Express framework는 npm을 통해 다운로드 할 수 있고 http 모듈로 작성한 것과 달리 미들웨어 추가가 편리하고, 자체 라우터를 제공합니다.
메소드와 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
})
미들웨어는 request에 필요한 기능을 더하거나, 문제가 발견 된 부분을 걷어냅니다. 미들웨어는 Express의 가장 큰 장점 중 하나입니다.
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가 담겨져 있습니다.
})
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()를 통해서 다음 미들웨어로 데이터를 전달하고 있습니다.