앞선 아티클에서 전반적인 미들웨어의 특성에 대해 정리했습니다. 이어서 계속 살펴보겠습니다.
- 미들웨어 간에 데이터를 전달하는 방식에는 세션을 사용하는 방법이 있습니다. req.session 객체에 데이터를 넣는 방식이죠. 단, 이는 세션이 유지되면 데이터도 무조건 계속 유지된다는 단점이 있습니다.
- 요청이 끝날 때까지만 데이터를 유지하고자 한다면, res.locals 객체에 데이터를 넣으면 됩니다. 이를 사용하면, 새로운 요청이 발생했을 때는 res.locals의 데이터는 초기화 됩니다.
app.use((req, res, next) => {
res.locals.data = '데이터 삽입';
next();
}, (req, res, next) => {
console.log(res.locals.data); // 데이터 받기
next();
});
- app.set으로 데이터를 설정하고 이를 app.get, 또는 req.app.get으로 불러올 수 있다는 것도 살펴본 적이 있습니다. 하지만, app.set은 익스프레스에서 전역적으로 사용되므로, 하나의 요청에서만 유지해야 하는 값을 전달하는데는 부적절하고, 앱 전체의 설정을 공유할 때 사용해야 합니다.
미들웨어 사용 시 유용한 패턴인, 미들웨어 안에 미들웨어 넣기 패턴을 보겠습니다. 아래 예제의 두 라인은 같은 기능을 합니다.
app.use(morgan('dev'));
// or
app.use((req, res, next) => {
morgan('dev')(req, res, next);
});
이러한 방식을 사용하면 미들웨어 사용에 있어서 기능 확장이 가능합니다. 예를 들어, 분기 처리가 아래와 같이 가능합니다.
app.use((req, res, next) => {
if(process.env.NODE_ENV === 'production') {
morgan('combined')(req, res, next);
} else {
morgan('dev')(req, res, next);
}
});
'Programming > Node.js' 카테고리의 다른 글
7. 익스프레스 (1) - 미들웨어 [10] : multer 2 (1) | 2024.09.05 |
---|---|
7. 익스프레스 (1) - 미들웨어 [10] : multer 1 (1) | 2024.09.04 |
7. 익스프레스 (1) - 미들웨어 [9] : 미들웨어의 특성 정리 1 (5) | 2024.09.02 |
7. 익스프레스 (1) - 미들웨어 [8] : express-session 2 (2) | 2024.09.01 |
7. 익스프레스 (1) - 미들웨어 [7] : express-session 1 (1) | 2024.08.31 |