미들웨어
미들웨어 함수는 요청 오브젝트(req), 응답 오브젝트(res), 그리고 그 다음의 미들웨어 함수에 대한 액세스 권한을 갖는 함수로 이루어져 있음
미들웨어 함수 로드
// 모든 요청에 대해 미들웨어 적용
app.use(<middleware>);
// 특정 요청에 대해 미들웨어 적용
app.get('/', <middleware>, (req, res, next) => {
res.json();
})
JavaScript
복사
미들웨어의 순서는 중요하다! 먼저 로드되는 미들웨어 함수가 먼저 실행됨
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);
JavaScript
복사
라우팅
const router = express.Router()
router.get('/lower', (req, res) =>{
res.send(data)
})
router.post('/lower', (req, res) =>{
// do something
})
JavaScript
복사
body(payload)를 구조화
// 이전 HTTP
// let body = [];
// request.on('data', (chunk) => {
// body.push(chunk);
// }).on('end', () => {
// body = Buffer.concat(body).toString();
// // body 변수에는 문자열 형태로 payload가 담겨져 있습니다.
// });
const bodyParser = require('body-parser')
const jsonParser = bodyParser.json()
// 생략
app.post('/api/users', jsonParser, function (req, res) {
// req.body에는 JSON의 형태로 payload가 담겨져 있습니다.
})
JavaScript
복사
CORS 허용
const cors = require('cors')
// 특정 요청에 대해 CORS 허용
app.get('/products/:id', cors(), function (req, res, next) {
res.json({msg: 'This is CORS-enabled for a Single Route'})
})
// 모든 요청에 대해 CORS 허용
app.use(cors())
JavaScript
복사
요청 헤더 사용자 인증 정보 확인
app.use((req, res, next) => {
// 토큰 있니? 없으면 받아줄 수 없어!
if(req.headers.token){
req.isLoggedIn = true;
next()
} else {
res.status(400).send('invalid user')
}
})
JavaScript
복사
next?
next()를 호출하지 않는다면 파이프라인이 그 미들웨어에서 종료되고 그 이후의 라우트 핸들러와 미들웨어가 호출되지 않기 떄문입니다. 따라서 next()를 호출하지 않는다면 클라이언트에게 어떤 응답이라도 보내줘야 합니다. 응답마저 보내지 않게 되면 클라이언트는 멈춰있다가 타임아웃에 걸립니다