인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

whsrpdla님의 프로필 이미지
whsrpdla

작성한 질문수

[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지

next(err) 로 next에 인자를 줬는데 바로 error처리 미들웨어로 안넘어갑니다ㅠㅠ

작성

·

392

0

9강 실습하면서 page.js 라우터에

router.get('/test', (req, res) => {
  const err = new Error('고의로 만든 에러!');
  next(err);
});

 이렇게 미들웨어를 추가해놨습니다. localhost:8001/test 에 접속을 시도하면 바로 에러처리를 하고싶었어요

근데 이렇게 접속시도하니까 app.js 에 있는 404 처리 미들웨어(req,res,next)를 들렀다가, 에러처리 미들웨어(err,req,res,neext)로 넘어가는데 이유를 모르겠습니다 ㅠㅠ

답변 1

1

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

404 들렀다가 에러 처리 미들웨어로 넘어간 것은 어떻게 파악하신 건가요? 에러 처리 미들웨어로 넘어간 뒤에 화면에 고의로 만든 에러! 라고 떴나요?

whsrpdla님의 프로필 이미지
whsrpdla
질문자

console.log 로 확인했습니다.

app.js 랑 page.js 일부 코드는 아래처럼 작성했습니다.

// app.js 미들웨어

app.use('/', pageRouter);

app.use((req, res, next) => {
    console.log('여기 오나?');
    next();
});

app.use((req, res, next) => {
    console.log('404처리 미들웨어');
  const error =  new Error(`${req.method} ${req.url} 라우터가 없습니다.`);
  error.status = 404;
  next(error);
});

app.use((err, req, res, next) => {
  res.locals.message = err.message;
  res.locals.error = process.env.NODE_ENV !== 'production' ? err : {};
  res.status(err.status || 500);
  res.render('error');
});




//page.js 미들웨어 일부
router.get('/test', (req, res) => {
  const err = new Error('고의로 만든 에러!');
  next(err);
  // res.json({'admin':'minsang', 'age':28});
});

제 예상엔 localhost:8001/test로 접속 시도하면, 먼저 app.get('/') 부분에서 pagerouter로 넘어가고, router.get('/test')미들웨어에서 next(error) 코드를 실행하면 app.get((err,req,res,next)) 부분으로 바로 넘어갈 줄 알았는데 콘솔은 아래와 같이 나왔습니다.

nodemon] starting `node app.js`
8001 번 포트에서 대기중
여기 오나?
404처리 미들웨어
GET /json 404 25.851 ms - 2692
GET /main.css 304 1.361 ms - -
제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

요청이 /test가 아니라 /json인데요?

whsrpdla님의 프로필 이미지
whsrpdla
질문자

아 저런 실수를..감사합니다!

whsrpdla님의 프로필 이미지
whsrpdla

작성한 질문수

질문하기