만약 404 에러가 발생한다면 res.locals.message는 ‘${req.method} ${req.url} 라우터가 없습니다.’가 됩니다. next(error)에서 넘겨준 인수가 에러 처리 미들웨어의 err로 연결되기 때문입니다.
에러 처리 미들웨어는 error라는 템플릿 파일(넌적스이므로 error.html 파일)을 렌더링합니다. 렌더링 시 res.locals.message와 res.locals.error에 넣어준 값을 함께 렌더링합니다. res.render에 변수를 대입하는 것 외에도, 이렇게 res.locals 속성에 값을 대입해 템플릿 엔진에 변수를 주입할 수 있습니다.
error 객체의 스택 트레이스(error.html의 error.stack)는 시스템 환경(process.env.NODE_ENV)이 production(배포 환경)이 아닌 경우에만 표시됩니다. 배포 환경인 경우에는 에러 메시지만 표시됩니다. 에러 스택 트레이스가 노출되면 보안에 취약할 수 있기 때문입니다.
서버를 실행하고 localhost:3000/abc에 접속하면 에러 메시지와 함께 응답 코드, 스택 트레이스를 확인할 수 있습니다.
▲ 그림 6-12 에러 스택 트레이스
위 그림에서 404 아래의 Error 부분이 스택 트레이스입니다. 스택 트레이스를 통해 서버 폴더 구조를 유추할 수 있으므로 배포 환경에서는 숨기는 것입니다.
이제 서버 만들기를 위한 기본 준비가 다 끝났습니다. 앞으로 한 가지만 더 배우면 실제 서비스를 만들 수 있습니다. 사용자들이 보낸 데이터들을 저장하는 곳, 바로 데이터베이스입니다.