미들웨어란?
미들웨어는 요청(Request)과 응답(Response) 도중에 다른 함수로 접근할 수 있는 함수이다. 미들웨어 함수는 일반적으로 next라는 이름의 변수로 표시된다.
또한 app.use() 나 app.Method() - app.get(), app.post()... 함수를 통해서 바인딩 된다.
나는 token을 이용한 로그인을 구현하다가 미들웨어를 공부하게 되었다.
정의
함수 정의와 비슷하게 정의한다. (그림참고)
미들웨어를 사용하는 간단한 예제를 실행해보겠다.
app.js
let myMiddleware = function(req, res, next){ // 미들웨어 선언
console.log('이곳을 거쳐갑니다.');
next();
};
app.use(myMiddleware) // 미들웨어 사용
app.get('/', function(req, res, next) { // 라우터 선언
res.render('index', { title: 'Express' });
});
// app.use('/', indexRouter);
app.use('/users', usersRouter);
결과값
미들웨어의 종류
애플리케이션 레벨 미들웨어
라우터 레벨 미들웨어
오류 처리 미들웨어
기본 제공 미들웨어
써드파티 미들웨어
에플리케이션 레벨 미들웨어
app.use() 함수를 이용해 애플리케이션 미들웨어를 인스턴스에 바인드한다. 이 함수는 앱이 요청을 수신할 때마다 실행된다.
예제 1.
app.js
app.use('/user/:id', function(req, res, next){ // 미들웨어 선언
console.log('이곳을 거쳐갑니다.');
next();
});
// app.use(myMiddleware)
app.use('/', indexRouter); // 그리고 이쪽으로 이동함
app.use('/users', usersRouter);
app.use(/user:id)로 갈때마다 미들웨어가 실행된다. 이제 미들웨어를 함수로 빼서 사용해보자.
예제2.
middleware folder, firstMiddleware.js 생성
app.js
let usersMiddleware = require('./middleware/firstMiddleware'); // 미들웨어 선언
// app.use(myMiddleware)
app.use('/', indexRouter);
app.use('/users/:id', usersMiddleware); // 미들웨어 실행
app.use('/users', usersRouter);
usersMiddleware라는 변수에 방금 만든 미들웨어 함수를 넣어주었다.
또한 /users를 거쳐가기 전에 app.use('/users/:id', usersMiddleware); 해당 변수를 호출하여 접근하도록 하였다.
let myMiddleware = function(req, res, next){
console.log('이곳을 거쳐갑니다.');
next();
};
module.exports = myMiddleware;
router.get('/', function(req, res, next) {
res.send('respond with a resource');
});
router.get('/:id', function(req, res, next) {
console.log('id value : ' , req.params.id)
res.send('respond with a resource');
});
그리고 users.js에는 해당 url로 접근 할 수 있는 라우터를 구현했다.
결과값
라우터 레벨 미들웨어

middleware/secondMiddleware.js 생성
let usersMiddleware = require('./middleware/secondMiddleware'); // 미들웨어 선언
app.use(usersMiddleware); // 미들웨어 실행
app.use('/', indexRouter);
app.use('/users', usersRouter);
usersMiddleware의 경로를 방금 만든 js 페이지로 설정해주고
다른 라우터들이 실행되기 전에 app.use(usersMiddleware); 를 작성하여 userMiddleware를 선언하였다.
secondMiddleware.js
// mount path가 없는 미들웨어. 모든 요청에 실행된다.
router.use(function (req, res, next) {
console.log('Time:', Date.now());
next();
});
// /user/:id path로 온 모든 HTTP method를 받는 미들웨어
router.use('/users/:id', function(req, res, next) {
console.log('Request URL:', req.originalUrl);
next();
}, function (req, res, next) {
console.log('Request Type:', req.method);
next();
});
// /user/:id path로 온 GET 방식만 받는 미들웨어
router.get('/users/:id', function (req, res, next) {
if (req.params.id == 0) next('route');
// 파라미터가 0이면 next를 skip하고(미들웨어로 가는것을 중단하고) 다음 route로 전달 - special page로 렌더링됨
else next();
}, function (req, res, next) { // index page로 렌더링
res.render('index', { title: 'index page' });
});
// /user/:id path로 온 경우 special page로 랜더링 해주는 미들웨어
router.get('/users/:id', function (req, res, next) {
console.log(req.params.id);
res.render('special');
});
라우터레벨 미들웨어들을 선언해보았다. 주석을 참고하여 이해를 하고 테스트를 해보도록 하자.
결과값
/, /users호출시
첫번째 미들웨어가 호출된다.
POST로 각각 /users/100를 호출시
첫번째 미들웨어와 두번째 미들웨어가 실행된다.
GET /users/100 호출시
첫번째, 두번째 미들웨어가 호출되고,
index 페이지로 렌더링하는 세번재 미들웨어까지 실행되었다.
오류처리 미들웨어는 다른 페이지에 이어서 작성해볼것이다.
reference : http://expressjs.com/ko/guide/using-middleware.html
Express 미들웨어 사용
미들웨어 사용 Express는 자체적인 최소한의 기능을 갖춘 라우팅 및 미들웨어 웹 프레임워크이며, Express 애플리케이션은 기본적으로 일련의 미들웨어 함수 호출입니다. 미들웨어 함수는 요청 오
expressjs.com
참고 : https://github.com/datoybi/blog-posting/tree/main/middleware1
'개발 > Node.js' 카테고리의 다른 글
[nodejs] Multer를 이용한 파일 업로드 (0) | 2022.01.24 |
---|---|
[nodejs] 오류 처리 미들웨어 사용법 (비동기) (0) | 2022.01.19 |
nodejs를 이용한 페이징 처리 (DB 연결) Step3 (0) | 2021.11.22 |
nodejs를 이용한 페이징 처리 (페이징 버튼 처리) Step2 (0) | 2021.11.22 |
nodejs를 이용한 페이징 처리 (버튼 누를시 게시글 갱신) Step1 (0) | 2021.11.16 |