미들웨어

미들웨어

미들웨어 함수는 요청 오브젝트(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()를 호출하지 않는다면 클라이언트에게 어떤 응답이라도 보내줘야 합니다. 응답마저 보내지 않게 되면 클라이언트는 멈춰있다가 타임아웃에 걸립니다