[Express] 미들웨어 작성

1. 미들웨어 작성

가. 이론

Express 앱에서 사용하기 위한 미들웨어 작성

Learn how to write custom middleware functions for Express.js applications, including examples and best practices for enhancing request and response handling.

미들웨어 함수는 요청 오브젝트(req), 응답 오브젝트 (res), 그리고 애플리케이션의 요청-응답 주기 중 그 다음의 미들웨어 함수 대한 액세스 권한을 갖는 함수입니다. 그 다음의 미들웨어 함수는 일반적으로 next라는 이름의 변수로 표시됩니다.

현재의 미들웨어 함수가 요청-응답 주기를 종료하지 않는 경우에는 next()를 호출하여 그 다음 미들웨어 함수에 제어를 전달해야 합니다.

그렇지 않으면 해당 요청은 정지된 채로 방치됩니다.

나. 예시

서드파티 미드웨어를 이용해서 필요한 기능을 가져올 수도 있지만 원한다면 직접 만들 수 있다.

...
app.use(bodyParser.urlencoded({extended: false}));
app.use(compression());
...
Code language: CSS (css)

위와 같이 서드파티 미들웨어처럼 작성하면 된다.

아래에는 공식 홈페이지에서 제공하는 예시다.

“myLogger”라는 이름의 미들웨어 함수에 대한 간단한 예다.

이 함수는 앱에 대한 요청이 해당 함수를 거쳐 전달될 때 “LOGGED”를 출력한다.

이 미들웨어 함수는 myLogger라는 변수에 저장되어있다.

var myLogger = function (req, res, next) {
  console.log('LOGGED');
  next();
};
Code language: JavaScript (javascript)

만약 사용자의 요청마다 ‘LOGGED’를 출력하고 싶다면 다음과 같이 배치하면 된다.

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);
Code language: PHP (php)
  • next() : 스택 내의 그 다음 미들웨어 함수에 요청을 전달한다. 스크립트에 미들웨어 함수가 위에서부터 아래까지 쌓여있는 모습을 보고서 스택이라고 하는 것 같다.

모든 요청이 아니라 특정 라우트에만 실행하고자 변경할 수 있다.

만약 get 요청에만 실행하고 싶다면…

...
app.get('*', myLogger);
...
Code language: JavaScript (javascript)

댓글 남기기