MERN stack은 MongoDB, Express, React, Node를 지칭한다.(JavaScript 생태계에서 인기있는 프레임워크4대장)
이 중에서 Express.js는 Node.js환경에서 웹 서버, 또는 API서버를 제작하기 위해 사용되는 인기있는 프레임워크이다.
Express framework는 npm을 통해 다운받을 수 있다.
Express로 구현한 서버가 http 모듈로 작성한 서버와 다른 점
1. 미들웨어 추가가 편리하다.
2. 자체 라우터를 제공한다. (npm install express-router)
- 라우팅: 메소드와 URL(/lower, /upper 등)로 분기점을 만드는 것.
클라이언트는 특정한 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
})
미들웨어를 사용하는 상황은 다음과 같다.
- 모든 요청에 대해 url이나 메소드를 확인할때
- POST 요청 등에 포함된 body(payload)를 구조화 할때 (쉽게 얻어내고자 할 때)
- 모든요청/응답에 CORS 헤더를 붙여야 할 때
- 요청 헤더에 사용자 인증 정보가 담겨있는지 확인 할 때
var myLogger = function (req, res, next) {
console.log('LOGGED');
next();
};
이 함수를 호출하면 앱 내의 그 다음 미들웨어 함수가 호출된다. next()함수는 Node.js또는 Express API의 일부가 아니지만, 미들웨어 함수에 전달되는 세 번째 인수이다. 미들웨어 함수 myLogger은 단순히 메세지를 인쇄한 후 next()함수를 호출하여 스택 내의 그 다음 미들웨어 함수에 요청을 전달한다.
예를들어 루트경로(/)로 라우팅 하기 전에 myLogger 미들웨어 함수를 로드한다.
var express = require('express');
var app = express();
var myLogger = function (req, res, next) {
console.log('LOGGED');
next();
};
app.use(myLogger);
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.listen(3000);
24열 위에 app.use(myLogger)하면 콘솔에 찍힘
24열 아래에 app.use하면 콘솔 안찍힘
app.get('/', (req, res) => {
res.status(200).send('Welcome, States Airline!');
});
app.use((req, res, next) => {
res.status(404).send('Not Found!');
});
이것도 순서 중요하다. 에러 미들웨어가 get요청보다 위에있으면 서버를 아무리 실행해도 'Not Found!'만 뜰것이다.
순서 중요하다!!!
-dev는 development mode, 로컬에서만 사용
dev 명령어로 사용가능
참고자료
-코드스테이츠
-express공식문서
-https://velog.io/@chy0428/Node-JS-Nodemon-%EC%84%A4%EC%B9%98