[Node.js] 404(Not Found) 페이지 구현 - (6)
404(Not Found)란?
HTTP는 응답 상태에 따라 다양한 코드가 존재한다. 그 중 404(Not Found)는 단어 그대로에서 알 수 있듯이 서버가 요청한 페이지를 찾을 수 없음을 의미한다. 즉, 서버에 존재하지 않는 페이지에 대한 요청이 있을 경우 서버는 이 코드로 응답을 하게 되는 것이다. 그렇다면 서버가 이렇게 응답했을 때, 사용자는 자신이 존재하지 않는 페이지에 접근하고 있음을 알 수 있어야 하므로 이에 따른 페이지를 구현해 줘야 한다.
페이지 구현하기
const pathname = url.pathname;
앞서 URL 활용에 관한 글에서 new URL(input[,base])
을 통해 현재 화면에 보이는 페이지의 URL에 대한 정보를 객체로 생성할 수 있다는 것을 알 수 있었다. 그리고 이 정보들 중 pathname
은 URL에서 /
부터에 관한 내용을 담고 있는데, 페이지를 찾을 수 없었다는 뜻은 pathname
에 입력된 페이지가 존재하지 않는 페이지임을 의미할 것이다. 다시 말해, 현재로써 구현한 페이지에는 pathname
뒤에 쿼리 파라미터를 사용하여 페이지를 구분하고 있기 때문에 쿼리 파라미터 외에 다른 값이 입력되면 서버에서 404로 응답을 하면 된다는 뜻이다.
if (pathname === "/") {
fs.readFile(`data/${id}`, "utf-8", (err, data) => {
const template = `
<!DOCTYPE html>
<html>
<head>
<title>문가네</title>
<meta charset="utf-8" />
</head>
<body>
<h1><a href="/">문가네</a></h1>
<ol>
<li><a href="/?id=1-first">첫번째</a></li>
<li><a href="/?id=2-second">두번째</a></li>
<li><a href="/?id=3-third">세번째</a></li>
</ol>
${data}
</body>
</html>
`;
res.writeHead(200);
res.end(template);
});
} else {
res.writeHead(404);
res.end("404(Not Found)");
}
이렇게 조건문으로 “만약 ‘pathname’이 ‘/’라면 서버가 200을 반환하고 template
을 보여주고, 그 외의 상황에는 서버가 404를 반환하고 ‘404(Not Found)’를 보여줘라” 라고 코드를 만들면 된다. 이 상태에서 URL에 잘못된 경로를 입력하면 404 페이지가 나타나게 된다.
참고: Node.js 공식문서