[Error] 에러처리 미들웨어, 500 Server Error

sooyoung choi·2023년 11월 17일
0

Error log

목록 보기
3/9
post-thumbnail

에러 처리를 미들웨어로 빼고 싶어서 같이 공부하는 칭구랑 해봤지만 나만 계속 떴던 500 Server error.. 에러처리 미들웨어에 대해 잘 알지 못해서 생긴 일이였어서 미들웨어에 대해 다시 기록해놔야겠다고 생각했다.

에러처리 미들웨어

...

app.get('/error', (req, res, next) => {
    next(); // next()에 인수가 없다면, 바로 다음 미들웨어 함수로 넘어가게 된다. 
}, (req, res) => { 
	try {
    	// .. 에러 발생 코드
    } catch(err) {
    	error(err); // next()에 인수가 있다면, 에러 처리 미들웨어로 점프하게 된다. 
    }  
});

...

// 에러 미들웨어는 인자는 반드시 4개 선언
app.use((err, req, res, next) => { 
    console.error(err);
    res
    	.status(500)
        .send(err.message); 
})
  • 에러처리 미들웨어는 매개변수가 err, req, res, next 4개로 이루어져있다.

  • 모든 매개변수를 사용하지 않더라도 매개변수가 반드시 4개로 이루어져야한다!!

    next 매개변수를 안쓰길래 뺐더니 계속 500 에러가 떴었다..



미들웨어 next()

  • next() : 다음 미들웨어로 넘어감
  • next(인수) - 에러 핸들러로 넘어감
  • next('router') - 다음 라우터로 넘어감
...

app.get('/', (req, res, next) => {
    if (false) {
    	next(); // 다음 미들웨어로 넘어간다.
    } else {
    	next('route'); // next()에 'route'인수를 주게되면, 다음 미들웨어가 아닌, 다음 라우터로 넘어가게 된다. 
    }
    
}, (req, res) => { 
	// ... next()면 실행되지만,
	// ... next('route')면 실행되지 않는다.
});


app.get('/', (req, res, next) => { 
	// ... next('route')면, 그 다음 라우터인 이쪽이 실행된다.
})

참조링크: https://inpa.tistory.com/entry/EXPRESS-%F0%9F%93%9A-%EB%AF%B8%EB%93%A4%EC%9B%A8%EC%96%B4-%F0%9F%92%AF-%EC%9D%B4%ED%95%B4-%EC%A0%95%EB%A6%AC

0개의 댓글