코드가 조금 복잡해졌습니다. 주소가 /login과 /로 시작하는 것까지 두 개이므로 주소별로 분기 처리했습니다. http://localhost:8084에 접속하면 /로 요청을 보내고, cookie2.html에서 form을 통해 로그인 요청을 보낼 때 /login으로 요청을 보내게 됩니다. 소스 코드에서는 /login 부분이 먼저 나오지만 실제로 제일 먼저 실행되는 곳은 else 부분입니다.
➊ 쿠키는 mycookie=test 같은 문자열입니다. parseCookies 함수는 쿠키 문자열을 쉽게 사용하기 위해 자바스크립트 객체 형식으로 바꾸는 함수입니다. 이 함수를 거치면 { mycookie: 'test'}가 됩니다. 내부 내용은 중요한 게 아니므로 이해하지 않아도 됩니다. 그저 parseCookies 함수가 문자열을 객체로 바꿔준다고만 알고 있으면 됩니다.
➋ 로그인 요청(GET /login)을 처리하는 부분입니다. form은 GET 요청인 경우 데이터를 쿼리스트링으로 보내기에 URL 객체로 쿼리스트링 부분을 분석했습니다. 그리고 쿠키의 만료 시간도 지금으로부터 5분 뒤로 설정했습니다. 이제 302 응답 코드, 리다이렉트 주소와 함께 쿠키를 헤더에 넣습니다. 브라우저는 이 응답 코드를 보고 페이지를 해당 주소로 리다이렉트합니다. 헤더에는 한글을 설정할 수 없으므로 name 변수를 encodeURIComponent 메서드로 인코딩했습니다. 또한, Set-Cookie의 값으로는 제한된 ASCII 코드만 들어가야 하므로 줄바꿈을 넣어서는 안 됩니다. 이 책에서는 지면 공간의 제약으로 인해 줄바꿈되었습니다.
➌ 그 외의 경우(/로 접속했을 때 등), 먼저 쿠키가 있는지 없는지를 확인합니다. 쿠키가 없다면 로그인할 수 있는 페이지를 보냅니다. 처음 방문한 경우에는 쿠키가 없으므로 cookie2.html이 전송됩니다. 쿠키가 있다면 로그인한 상태로 간주해 인사말을 보냅니다.