[요청과 응답]

// server.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>nodejs webserver test</title>
  </head>
  <body>
    <h1>steve's webserver</h1>
    <p>letsgo</p>
  </body>
</html>
var http = require("http");
var fs = require("fs");

// req는 요청 res는 응답 해준다
const server = http.createServer((req, res) => {
  fs.readFile("./server.html", (err, data) => {
    if (err) {
      throw err;
    }
    res.end(data); // 응답 종료시 html 파일 전송 
  });
});

server.listen(8080, () => { // 리스닝
  console.log("Listenning on 8080 port");
});

[쿠키와 세션]

const http = require('http');
const fs = require('fs');
const url = require('url');
const qs = require('qs');

const parsedCookies = (cookie = '') => {
	// ; ; 로 구분된 쿠키를 오브젝트 형태로 변환
}

const session = {}; // 보통은 DB

const server = http.createServer((req, res) => {
	const cookies = parsedCookie(req.headers.cookie);

	if(req.url.startWith('/login')){ // 로그인 요청 받았을 시
		const {query} = url.parsed;
		const {name} = url.parse(query);

		// 만료시점 선택
		const expireTime = new Date();
		expireTime.setMinutes(expireTime.getMinutes() + 원하는 분);
		
		// 세션 만들기
		const randomInt = Date.now(); // 세션 번호 만들기
		session[randomInt] = {
			name, expireTime,
		};

		// 헤더의 'Set-Cookies'에 쿠키에 넣은 녀석들 담아서 응답하면 브라우저가 저장한다
		res.writeHead(302, { // 3xx 리다이렉션
			Location: '/', // 이 주소로 redirect 한다
			'Set-Cookies': `sessionId=${randomInt}; Expires=${expireTime.toGMTString()};
											HttpOnly; Path=/`,
		});
		// 헤더 달린 http res 응답
		res.end();
	} else if (cookies.sessionId && session[cookies.sessionId].expireTime > new Date()){
		// 그외 접속
		// 세션 정보 있을시 로그인 요청 없어도 로그인 되어있다
		// 이거 http 헤더에 명시해줘야 한글 데이터 안깨진다
		res.writeHead(200, {'Content-Type':'text/html; charset=utf-8'}); 
		res.end(`${session[cookies.sessionId].name}님 안녕하세요`);
	} else {
		// 기타 처음 접속해서 세션 정보없을시
	}
	
}

server.listen(8080, ()=>{console.log("8080포트에서 리스닝 중입니다!")})