강의

멘토링

커뮤니티

Inflearn Community Q&A

whsrpdla5741's profile image
whsrpdla5741

asked

[Renewed] Node.js Textbook - From Basics to Project Practice

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

Written on

·

412

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)로 넘어가는데 이유를 모르겠습니다 ㅠㅠ

mysqlnodejsmongodbSequelize

Answer 1

1

zerocho님의 프로필 이미지
zerocho
Instructor

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

whsrpdla님의 프로필 이미지
whsrpdla
Questioner

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 - -
zerocho님의 프로필 이미지
zerocho
Instructor

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

whsrpdla님의 프로필 이미지
whsrpdla
Questioner

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

whsrpdla5741's profile image
whsrpdla5741

asked

Ask a question