-
06/03 node.js 서버게임 웹 프로그래밍/node.js 2021. 6. 3. 13:17
1. http 모듈로 웹서버 만들기
쿠키, 세션 처리, 라우팅
createServer메서드
요청이 들어올 때마다 매번 콜백함수가 실행
req객체는 요청에 관한 정보
res객체는 응답에 관한 정보
포트
외부에서 PC에 연결할 수 있는 통로
서버 내에서 프로세스를 구분하는 번호
유명한 포트번호는 21(ftp) 80(http) 443(https) 3306(mysql)
포트만 다르게 해서 여러 서버를 실행할 수 있음
server.listen
서버에 포트를 열어줌
클라이언트에게 공개할 포트 번호와 포트 연결 완료 후 실행될 콜백 함수를 넣어줌
server1.js
const http = require('http'); const port = 3000; const server = http.createServer((req, res) => { res.write('<h1>Hello Node!</h1>'); res.end('<p>Hello Server!</p>'); }); server.listen(3000, ()=> { console.log(`${port}번 포트에서 서버 대기중입니다.`); });
서버 종료는 터미널에서 ctrl + c
특정 이벤트 발생시 콜백 실행
const http = require('http'); const server = http.createServer((req, res) => { res.write('<h1>Hello Node!</h1>'); res.end('<p>Hello Server!</p>'); }); server.listen(8080); server.on('listening', ()=>{ console.log('8080번 포트에서 서버 대기중'); }); server.on('error', (error)=>{ console.error(error); });
http파일을 불러와서 표시
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Node.js 웹서버</title> </head> <body> <h1>Node.js 웹 서버</h1> <p>만들 준비되셨나요?</p> </body> </html>
Visual studio code
확장 -> live server
Open with Live Server
server2.js
const http = require('http'); const fs = require('fs'); const port = 3001; const server = http.createServer((req, res) => { fs.readFile('./server2.html', (err, data) => { if(err) throw err; res.end(data); }) }); server.listen(port, ()=>{ console.log(`${port}번 포트에서 서버 대기중...`) })
2. 쿠키와 세션
클라이언트에서 보내는 요청은 누가 요청을 보내는지 모름
로그인을 구현하려면 쿠키와 세션을 알아야함
로그인한 후 새로고침해도 로그아웃되지 않는 이유는 클라이언트가 서버에게 누구인지 지속적으로
알려주고 있기 때문
서버는 요청에 대한 응답에 쿠키(키-값의 쌍)를 같이 보냄
브라우저는 쿠키가 있다면 자동으로 동봉해서 보내서 따로 처리할 필요가 없음
쿠키는 요청과 응답의 헤더에 저장
요청과 응답은 각각 헤더와 본문을 가짐
const http = require('http'); let server = http.createServer((req, res)=> { res.writeHead(200, {'Set-Cookie' : 'mycookie=test'}); res.end('Hello Cookie'); }); server.listen(3000, ()=> { console.log(3000 + '포트에서 서버 대기중...'); });
const http = require('http'); let server = http.createServer((req, res)=> { console.log(req.headers.cookie); //res.writeHead(200, {'Set-Cookie' : 'mycookie=test'}); res.end('Hello Cookie'); }); server.listen(3000, ()=> { console.log(3000 + '포트에서 서버 대기중...'); });
querystring을 사용하여 query를 파싱
const http = require('http'); const fs = require('fs'); const url = require('url'); const qs = require('querystring'); //서버 생성 const server = http.createServer((req, res) => { let message = ''; if(req.url.startsWith('/')) { message = 'home'; if(req.url.startsWith('/login')) { message = 'login'; console.log('url : ' + req.url); const { query } = url.parse(req.url); console.log('query : ' + query); const {name, age } = qs.parse(query); console.log('name: ' + name + ', age: ' + age); } } res.end(message); }); //서버를 시작한다. server.listen(3000, () => { console.log('서버가 시작 되었습니다.') })
res.end에 한글쓰면 깨짐
res.writeHead에 Content-Type을 text/html; charset=UTF-8로 설정
주소별 분기처리
http://localhost:3000 http://localhost:3000/login '게임 웹 프로그래밍 > node.js' 카테고리의 다른 글
06/09 node.js (0) 2021.06.09 06/08 node.js (0) 2021.06.08 06/04 node.js (0) 2021.06.04 06/02 node.js (0) 2021.06.02 06/01 node.js (0) 2021.06.01