지금까지는 next에 아무런 인수를 넣지 않았지만 next 함수에 인수를 넣을 수도 있습니다. 단, 인수를 넣는다면 특수한 동작을 합니다. route라는 문자열을 넣으면 다음 라우터의 미들웨어로 바로 이동하고, 그 외의 인수를 넣는다면 바로 에러 처리 미들웨어로 이동합니다. 이때의 인수는 에러 처리 미들웨어의 err 매개변수가 됩니다. 라우터에서 에러가 발생할 때 에러를 next(err)를 통해 에러 처리 미들웨어로 넘깁니다.
▲ 그림 6-7 에러 처리 미들웨어로 에러 보내기
미들웨어 간에 데이터를 전달하는 방법도 있습니다. 세션을 사용한다면 req.session 객체에 데이터를 넣어도 되지만, 세션이 유지되는 동안에 데이터도 계속 유지된다는 단점이 있습니다. 만약 요청이 끝날 때까지만 데이터를 유지하고 싶다면 res.locals 객체에 데이터를 넣어두면 됩니다.
app.use((req, res, next) => { res.locals.data = '데이터 넣기'; next(); }, (req, res, next) => { console.log(res.locals.data); // 데이터 받기 next(); });
현재 요청이 처리되는 동안 res.locals 객체를 통해 미들웨어 간에 데이터를 공유할 수 있습니다. 새로운 요청이 오면 res.locals는 초기화됩니다.