• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

에러 처리에 관해 질문 있습니다.

18.11.05 19:22 작성 조회수 93

0

1.

에러 처리 부분에서 질문 있습니다.

강좌중에 말씀하시,

app.use((req.res.next) =>{

res.status(404).send(‘Not Fount’); })

이 코드 대로라면, 라우터들이 실행되고, 마지막에는 결국 위의 라우터까지 도달하기 때문에,

무조건 ‘not fount’ 가 실행 되어야 하는 거 아닌가요? 미들웨어들은 순서대로 계속 실행되니까요.

그리고 위에, 404 자리에, 505나 다른 숫자들을 집어 넣으면 다른 에러들도 커버가 되는 건가요?

404에러를 커버하기 위해서는 위의 app.use가 404 에러를 디덱팅하는 방법이 있어야 하는데 위의 코드에서는 res.status, 즉 그냥 응답하라는 말만 있어서요.

또 위의 코드는 아래의 애러 핸들러와는 독립적으로 움직인다고 보면 되겠죠?

그러나 만약, next('Not Found')를 넣으면 이것도 아래의 애러 핸들러로 가는 거죠?

app.use(function(err, req, res, next){

res.status(500).send(‘Server Error’);

})

  1. http-errors(createError)를 사용 했들때(책에 나온 예제).
  2. 책에는서는 (페이지 197)

app.use(function(req, res, next){

next(createError(400));})

을 사용했을 경우에는 저기서 만들어진 에러 코드가 에러 헨들러로 보낸다고 나와 있습니다.

1번과 비슷한 질문인데, 위의 코드 상에서는 어떤 에러를 어떻게 디텍팅하는 거죠? 코드 상에서는 req, res, next 인데, req 인자를 사용한 것도 아니고, 바로 에러를 만들어서 쏴주는 거 같아서요.

혹시 위의 코드와는 상관 없이 무조건 적으로 에러들을 만들어 놓고 대기하고 있다가, 발생하면 디텍팅해서 "에러핸들러" 쪽으로 넘기는 코드 인가요?

항상 좋은 강좌 잘 보고 있습니다.

감사합니다.

답변 2

·

답변을 작성해보세요.

1

라우터에서 만약 next를 하지 않았다면 404 핸들러에 요청이 도달하지 않습니다. 404 핸들러에 요청이 도달하는 이유는 요청이 라우터에 아무것도 해당되지 않았기 때문입니다. 404 핸들러는 사실 에러 핸들러는 아니고 마지막 최종적으로 라우팅이 처리되는 곳입니다. if-elseif-else 문의 else같은 역할입니다. 여기서는 404에러 말고 다른 것을 응답해도 되지만 웹 표준 상 404를 응답하게 되어있습니다.

next(err)처럼 next 안에 에러를 넣어야 에러가 디텍팅되고 에러 처리 미들웨어로 바로 넘어갑니다. next(‘Not Found’)도 에러로 처리되고요. 실무에서는 에러 처리 미들웨어가 다음과 같은 식입니다.

app.use(function(err, req, res, next){

if (err.name === '무슨무슨에러') {

// 처리

} else if (err.name === '무슨에러') {

// 처리

} else {

res.status(500).send(‘Server Error’);

}

})

0

정지섭님의 프로필

정지섭

2019.11.14

와 실무예제 코드 까지 감사합니다.

그럼 각 if 와 else if 문에 서버 에러 코드표 보고 만들어 주면 되겠군여! 감사합니다