Expres.js 혹은 Express는 Node.js 를 위한 프레임워크로 사실상 표준 서버 프레임워크로 불리고 있다. Express를 사용하면 미들웨어(middleware)를 이용해 쉽게 서버를 구성할 수 있다는 장점이 있다.
자주 사용하는 Express의 미들웨어는 다음과 같다.
미들웨어는 Express 자체 미들웨어와 서드파티 미들웨어로 나누어진다. 다음은 공식문서에서 소개하는 자체 미들웨어를 사용한 간단한 코드이다.
const express = require('express');
const app = express();
// 메소드 ('라우트', (요청, 응답, 콜백) => {})
app.get('/', (req, res, next) => {
res.send('Hello World!');
});
app.listen(3000);
메소드와 라우트 경로, 요청과 응답을 한 번에 처리하므로 기존 createServer에 비해 조금 더 간결해졌다. 같은 코드를 순수 Node.js로 작성하면 다음과 같다.
const http = require('http');
const server = http.createServer((req, res) => {
if (req.method === 'GET') {
res.end('Hello World!');
}
});
server.listen(3000);
createServer와 미들웨어의 차이점은 바로 콜백 파라미터 next
로 이를 사용하면 다음과 같이 GET등의 메소드 함수의 실행 전에 app.use
로 지정한 기능을 동작시킬 수 있다. 이는 주로 404, 500 에러 등을 설정하기 위해 사용하며, try ...catch가 모든 메소드에 에러처리를 작성해야 하는 것과 달리 한 번의 작성으로 반복적인 로직 처리를 수행할 수 있다는 장점이 있다.
app.get('/', (req, res) => {
res.status(200).send("GET 요청!");
});
app.post('/', (req, res) => {
const list = req.body
res.status(200).json(list);
});
app.use((req, res, next) => {
res.status(404).send('Not Found!');
});
// try ...catch 사용시
app.get('/', (req, res) => {
try{
res.status(200).send("GET 요청!");
} catch(err) {
res.status(404).send('Not Found!' + err);
}
});
app.post('/', (req, res) => {
try{
const list = req.body
res.status(200).json(list);
} catch(err) {
res.status(404).send('Not Found!' + err);
}
});
이러한 방식이 다음과 같이 에러를 따로 정리하는 것과 별반 차이가 없다고 생각할 수 있다.
function err() {
res.status(404).send('Not Found!');
}
그러나 이러한 방식은 Express의 영역 안에서 관리되는 방식이 아니므로, 되도록이면 app.use
를 이용해 에러처리를 하는것이 추천된다.
대표적인 서드파티 미들웨어는 cors 미들웨어로 다음을 통해 설치할 수 있다.
$ npm install cors
cors 미들웨어를 이용하면 cors 조작을 다음을 통해 편하게 할 수 있다.
const express = require('express');
const app = express();
const cors = require('cors')
// 모든 요청에 대해 CORS 허용
app.use(cors())
// 특정 요청에 대해 CORS 허용
app.get('/products/:id', cors(), function (req, res, next) {
res.json({msg: 'This is CORS-enabled for a Single Route'})
})
다음으로 자주 쓰이는 미들웨어는 body-parser로 req로 받은 요청을 파싱하는 역할을 한다. Express 4.0 버전에서 빌트인 되어 현재 별도의 설치 없이 사용이 가능하다.
const express = require('express');
const app = express();
// 추가
app.use(express().json()); //json 형태로 parsing
app.use(express.urlencoded( {extended : false } ));
app.post('/',function(req,res){
let post = req.body;
console.log(post)
})