[NodeJs]:: 미들웨어 기본 정보 및 특성 활용

Darcy Daeseok YU ·2023년 6월 10일
0

미들웨어 특성

  1. 다음 미들웨어로 넘어가려면 next() 함수 호출
next() 호출해서 다음 미들웨어로 넘어가거나 
next("route") => 다음 라우터 
next(error) => 에러 핸들러로 직행

res.send() or res.sendFile()등의 메소드로 응답을 보내야함 

처리 안할 시 응답시간 초과 메시지 발생 (클라이언트 응답 없음 처리 될 가능성 있음) 

  1. 기본 형식 미들웨어
app.use((req, res, next) => {
  console.log('모든 요청에 다 실행됩니다.');
  next();
});

1-1. 다중 미들웨어

app.use((req, res, next) => {
  console.log('모든 요청에 다 실행됩니다.');
  next();
},(req, res, next) => {
  console.log('모든 요청에 다 실행됩니다.');
  next();
},(req, res, next) => {
  console.log('모든 요청에 다 실행됩니다.');
  next();
});
  1. 특정 url에 반응하는 미들웨어
app.use("/abc", (req, res, next) => {
  console.log('/abc 요청에 실행됩니다.');
  next();
});
  1. 에러 처리 미들웨어 (매개변수가 err, req, res, next로 네 개)
    특별한 경우가 아니면 가장 아래에 위치
(error, req, res, next) => {
  console.log('error가 발생되면 실행됩니다.');
  next();
});
  1. 미들웨어간 데이터 전달
    req.session 객체에 데이터를 넣어도됨 (세션 유지되는 동안 데이터가 계속 유지됨)
    요청이 진행되는 동안만 데이터를 유지하고자 하면 res.locals객에체 데이터 넣어둠.
    새로운 요청이 오면 res.locals는 초기화
    app.set / app.get으로도 데이터 저장 가능하나 전역적으로 사용되므로 부적합.
app.use((req, res, next) => {
  res.locals.data = '데이터 넣기';
  next();
}, (req, res, next) => {
  console.log(res.locals.data); // 데이터 받기
  next();
});
  1. 미들웨러 라이브러리 사용 2가지 방법
app.use(morgan('dev'));
// 또는
app.use((req, res, next) => {
  morgan('dev')(req, res, next);
});

or 

// 조건별 
app.use((req, res, next) => {
  if (process.env.NODE_ENV === 'production') {
    morgan('combined')(req, res, next);
  } else {
    morgan('dev')(req, res, next);
  }
});
profile
React, React-Native https://darcyu83.netlify.app/

0개의 댓글