💨 Middleware 란?
미들웨어는 Express.js 동작의 핵심이다.
HTTP 요청과 응답 사이에서 단계별 동작을 수행해주는 함수이기도 하다.
💨 middleware 작성법
req, res, next 를 가진 함수를 작성하면 해당 함수는 미들웨어로 동작할 수 있다.
req : HTTP 요청을 처리하는 객체
res : HTTP 응답을 처리하는 객체
next : 다음 미들웨어를 실행하는 함수
const logger = (req, res, next) => {
console.log(`Request ${req.path}`);
next();
}
//req.path 와 같은 요청을 처리할 수 있는 기능을 제공
const auth = (req, res, next) => {
if (!isAdmin(req)) {
res.send("Not Authorized");
return;
}
next();
}
✅ next 함수를 통해 다음 미들웨어를 호출해야한다. next() 함수가 호출되지 않으면, 미들웨어 사이클이 멈추기 때문이다.
1. 어플리케이션 미들웨어
app.use((req, res, next) => {
console.log(`Request ${req.path}`); // 1번
next();
})
app.use(auth); // 2번
//3번
app.get('/', (req, res, next) => { // '/' -> http 요청이 들어오면 미들 웨어는 위에서부터 순서대로 실행된다.
res.send('Hello Express');
});
use 나 http method 함수를 사용하여 미들웨어를 연결할 수 있다.
미들웨어를 모든 요청에 공통적으로 적용하기 위한 방법이다.
2. 라우터 미들웨어
router.use(auth); //3번
router.get('/', (req, res, next) => {
res.send('Hello Router');
}); //4번
app.use((req, res, next) => {
console.log(`Request ${req.path}`);
next(); //1번
});
app.use('/admin', router); // 2번
// 2번의 라우터가 admin 이라는 패스의 라우터에 연결이 되어있기 때문에,
// 요청이 들어왔을 때 1번이 먼저 실행이되고 그 후 순차적으로 3,4번이 실행된다.
3. 미들웨어 서브스텍
app.use(middleware1, middleware2, ...);
app.use('/admin', auth, adminRouter);
app.get('/', logger, (req, res, next) => {
res.send('Hello Express');
})
use나 http method 함수에 여러 개의 미들웨어를 동시에 적용할 수 있음.
주로 한 개의 경로에 특정해서 미들웨어를 적용하기 위해 사용한다.
4. 함수형 미들웨어
const auth = (memberType) => { // memberType이라는 인자를 넘겨받고
return (req, res, next) => { // return 값으로 아래와 같은 미들웨어 함수를 리턴해준다.
if (!checkMember(req, memberType)) {
next(new Error(`member not ${memberType}`));
return;
}
next();
}
}
app.use('/admin', auth('admin'), adminRouter);
app.use('/users', auth('member'), useRouter);
5. 오류처리 미들웨어
app.use((req, res, next) => {
if (!isAdmin(req)) {
next(new Error('Not Authorized')); // next에 인자를 넘기는 경우 중간 미들웨어들은 뛰어넘고
// 오류처리 미들웨어가 실행된다.
return;
}
next();
});
app.get('/', (req, res, next) => {
res.send('Hello Express');
});
app.use(err, res, req, next) => {
res.send('Error Occurred');
};
* 쿼리 파라미터 : URL의 쿼리 파라미터란 아래 ? 뒤에 지정하는 파라미터를 뜻합니다. 여러 개를 연결할 때는 & 를 씁니다. 쿼리 스트링(query string)이라고도 합니다.
'Node.js' 카테고리의 다른 글
9. 용어 정리 (0) | 2022.02.27 |
---|---|
8. REST API (0) | 2022.02.19 |
6. Express.js (0) | 2022.02.18 |
5. 웹 프레임워크 (0) | 2022.02.18 |
4. Node.js 의 모듈 (0) | 2022.02.18 |