✅ 미들웨어(middleware)
request와 response 사이에 위치하여 미들웨어(middleware)라고 불린다
✅ 미들웨어의 사용 예시
app.use(미들웨어) | 모든 경로 요청에서 미들웨어 사용 |
app.use('/abc', 미들웨어) | abc로 시작하는 모든 요청에서 미들웨어 사용 |
app.post('/abc', 미들웨어) | abc로 시작하는 POST 요청에서 미들웨어 사용 |
app.use 나 app.get 같은 라우터에 미들웨어를 여러 개 장착 가능하다
라우터 끝단에서 반드시 next 함수를 호출해야 다음 미들웨어를 실행할 수 있다
(보통 미들웨어는 내부적으로 next 함수를 호출하기에 따로 적어줄 필요는 없다)
미들웨어는 동시에 여러개를 장착할 수도 있다
✅ 실무에서 자주 사용하는 패키지
✔ morgan
request와 response에 대한 정보를 콘솔에 기록하는 미들웨어
- 설치
npm install morgan
- 미들웨어 사용
const morgan = require('morgan');
app.use(morgan('dev'));
인수로 dev, combined, common, short, tiny 사용 가능
개발 환경에서는 dev, 배포 환경에서는 combined 를 자주 사용한다
[HTTP 메소드] [주소] [Status 코드] [응답속도]-[응답바이트] 순서대로 출력된다
✔ static
정적 파일을 제공하는 라우터 역할의 미들웨어
기본으로 제공되기에 따로 설치할 필요는 없다
- 미들웨어 사용
//app.use('요청 경로', express.static('실제 경로'));
app.use('/', express.static(path.join(__dirname, '/src/index.html')));
✔ body-parser
request의 본문에 있는 데이터를 해석해 req.body 객체로 만들어주는 미들웨어
보통 Form 데이터나 AJAX 요청 데이터를 처리할 때 사용한다
(이미지, 동영상, 파일은 처리할 수 없고 이 형식은 multer 모듈을 사용해야 한다)
- 미들웨어 사용
app.use(express.json());
app.use(express.urlencoded({extended: false}));
express 4.16.0 버전부터 express에 내장되어 있으나
raw, text 형식 데이터는 body-parser을 설치해야 한다
- json 형식
{ name: 'gengminy', field: 'backend' }
- url-encoded 형식
name=gengminy&field=backend
url-encoded 에서
{ extend : true }
- qs 모듈 사용 (npm 패키지 설치 필요){ extend : false }
- 노드 내장 querystring 모듈 사용
body-parser는 이 둘을 모두 JSON 형식으로 req.body 에 추가해준다
✔ cookie-parser
request에 동봉된 쿠키를 해석해 req.cookies 객체로 만드는 미들웨어
- 미들웨어 사용
app.use(cookieParser(비밀키));
name=gengminy
라는 쿠키를 보내면
req.cookies는 { name : 'gengminy' }
로 해석해준다
cookieParser 의 첫 번째 인수로 비밀키를 넣으면
비밀 키를 통해 만든 서명을 쿠키 값 뒤에 붙여준다
✔ express-session
세션 관리용 미들웨어
로그인 등의 이유로 세션을 구현하거나 특정 사용자를 위한 데이터를 임시적으로 저장할 때 사용
사용자별로 req.session 객체 안에 유지된다
app.use(session({
resave: false,
saveUninitialized: false,
secret: process.env.COOKIE_SECRET,
cookie: {
httpOnly: true,
secure: false,
},
name: 'session-cookie',
}));
인수로 세션에 대한 설정을 받는다
resave
: 세션에 대한 수정 사항이 생기지 않더라도 다시 저장할 것인지 설정
saveUninitialized
: 세션에 저장할 내역이 없더라도 처음부터 세션을 생성할지 설정
secret
: 안전하게 쿠키를 전송하기 위한 서명 값, cookie-parser의 비밀값과 같게 하는 것이 좋음
name
: 세션 쿠키의 이름 (기본 값 connect.sid)
cookie
: 세션 쿠키에 대한 설정
✅ 미들웨어 안에 미들웨어 중첩
기존 미들웨어의 기능을 확장할 수 있는 테크닉
app.use((req, res, next)=>{
if (process.env.NODE_INV === 'production'){
morgan('combined')(req, res, next);
} else {
morgan('dev')(req, res, next);
}
});
조건에 따라 미들웨어를 분기 처리 할 수도 있다
✅ 에러 처리 미들웨어
app.use((err, req, res, next)=>{
console.error(err);
res.status(500).send(err.message);
});
에러처리 미들웨어는 매개변수가 반드시 네 개여야 한다
특별한 경우가 아니면 가장 아래에 위치하도록 하여야 한다
'📡 백엔드 > ⭐ Node.js' 카테고리의 다른 글
[Nodejs] Sequelize 로 SQL 데이터베이스 연동하기 (0) | 2022.05.21 |
---|---|
[Nodejs] Router 객체로 라우팅 파일 분리 (0) | 2022.05.17 |
[Nodejs] express 서버 열기 (0) | 2022.05.15 |
[Nodejs] 쿠키와 세션 (2) | 2022.05.15 |
[Nodejs] http 모듈로 간단한 REST API 사용 (0) | 2022.05.15 |