2021. 6. 3. 11:21ㆍNode.js
http 모듈에는 createServer 메서드가 있다.
요청이 들어올 때마다 매번 콜백 함수가 실행된다. 이 콜백 함수에 응답을 정해주면 된다.
req와 res 매개변수가 있다.
request = req (클라이언트가 서버에 요청)
response = res (서버가 클라이언트에 응답)
req는 요청에 관한 정보들, res는 응답에 관한 정보를 담고 있다.
createServer 메서드 뒤에 listen 메서드를 붙이고 클라이언트에게 공개할 포트 번호와 포트 연결 완료 후 실행될 콜백 함수를 넣는다.
//server1.js
const http = require('http');
const port = 3000;
const server = http.createServer((req,res)=>{
res.write('<h1>Hello World!</h1>'); //응답
res.end('<p>Hello Server!</p>'); //연결 끊기
});
server.listen(port,()=>{
console.log(`${port}번 포트에서 서버 대기 중입니다.`); //요청
});
========================================
const http = require('http');
const server = http.createServer((req,res)=>{
res.write('<h1>Hello World!</h1>');
res.end('<p>Hello Server!</p>');
});
server.listen(8000);
server.on('listening', ()=>{
console.log('8000포트에서 서버 대기 중');
});
server.on('error', (error)=>{
console.log(error);
});
//server2.js
//파일을 불러와서 서버에서 읽기
const http = require('http');
const fs = require('fs');
const port = 3001;
const server=http.createServer((req,res)=>{
fs.readFile('./server.html',(err,data)=>{
if(err) throw err;
res.end(data);
})
});
server.listen(port,()=>{
console.log(`${port}포트에서 서버 대기 중입니다.`);
});
<!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>테스트 서버</title>
</head>
<body>
<h1>Node.js 웹 서버</h1>
<p>만들 준비 됐다 집에 가고 싶다</p>
</body>
</html>
쿠키와 세션
클라이언트에서 보내는 요청은 누가 보내는지 모른다. 그래서 로그인을 구현하려면 내부적으로 쿠키와 세션을 사용한다.
로그인을 하면 로그인 정보를 쿠키에 저장하고, 다시 서버에 요청을 하면 응답할 때 쿠키를 같이 보내준다. (서버가 쿠키를 만듦.)
서버로부터 쿠키가 오면 웹 브라우저는 쿠키를 저장해두었다가 요청할 때마다 쿠키를 동봉해서 보내준다.
쿠키는 키-값 한 쌍으로 구성되며, 서버는 요청에 들어 있는 쿠키를 읽어서 사용자가 누구인지 파악한다. 쿠키가 내가 누구인지 지속적으로 추척하는 역할.
쿠키는 요청과 응답의 헤더에 저장되고, 요청과 응답은 헤더와 본문에 저장된다.
웹 브라우저는 자동으로 동봉해서 보내주므로 따로 처리할 필요가 없지만 서버에서 브라우저로 쿠키를 보낼 땐 코드로 작성한다.
const http = require('http');
let server = http.createServer((req,res)=>{
//console.log('cookie:'+req.headers.cookie);
//console.log('url:'+req.url);
//const cookie = parseCookies(req.headers.cookie); //쿠키는 헤더에 저장된다.
res.writeHead(200,{'Set-Cookie':'mycookie=test'});
res.end('Hello Cookie');
})
server.listen(3002,()=>{
console.log('3002포트에서 서버 대기 중');
})
하지만 위의 코드는 쿠키는 생성했지만 내가 누구인지 분간하지 못 한다.
const http=require('http');
const fs = require('fs');
const url = require('url');
const qs = require('querystring');
//서버 생성
let server = http.createServer((req,res)=>{
if(req.url.startsWith('/login')){
console.log('로그인');
}
res.end('200');
});
//서버 시작
server.listen(3004,()=>{
console.log("서버가 시작되었습니다.");
});
const http=require('http');
const fs = require('fs');
const url = require('url');
const qs = require('querystring');
//서버 생성
let server = http.createServer((req,res)=>{
let message = ''
console.log("/ :"+req.url.startsWith('/'));
console.log("/login :"+req.url.startsWith('/login'));
if(req.url.includes('/')){
message = 'home';
if(req.url.includes('/login')){
message= 'login';
}
}
res.end(message);
});
//서버 시작
server.listen(3004,()=>{
console.log("서버가 시작되었습니다.");
});
const http=require('http');
const fs = require('fs');
const url = require('url');
const qs = require('querystring');
//서버 생성
let server = http.createServer((req,res)=>{
let message = ''
if(req.url.includes('/')){
message = 'home';
if(req.url.includes('/login')){
message= 'login';
console.log("url: "+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(3004,()=>{
console.log("서버가 시작되었습니다.");
});
const http=require('http');
const fs = require('fs');
const url = require('url');
const qs = require('querystring');
/*const parseCookies = (cookie='')=>
cookie.split(';')
.map(v=>v.split('='))
.map(([k,...vs])=>[k,vs.join('=')])
.reduce((acc,[k,v])=>{
acc[k.trim()] = decodeURIComponent(v);
return acc;
},{});*/이건 별로 중요한 것이 아님 쿠키를 만드는 코드이다.
//서버 생성
let server = http.createServer((req,res)=>{
let cookie = {};
if(req.headers.cookie==undefined){
res.writeHead(200,{'Set-Cookie':'mycookie=test'});
console.log('created cookie');
}
else{
const cookie = parseCookies(req.headers.cookie);
console.log(cookie);
}
res.end();
});
//서버 시작
server.listen(3004,()=>{
console.log("서버가 시작되었습니다.");
});
const http=require('http');
const fs = require('fs');
const url = require('url');
const qs = require('querystring');
const port = 3004;
//서버 생성
let server = http.createServer((req,res)=>{
fs.readFile('./server4.html',(err,data)=>{
if(err) throw err;
res.writeHead(200, {'Set-Cookie':'mycookie=test'})
res.end(data);
let message = '';
if(req.url.includes('/')){
message = data;
if(req.url.includes('/login')){
const {query} = url.parse(req.url);
const {name}=qs.parse(query);
console.log("name: "+name);
}
}
})
});
//서버 시작
server.listen(port,()=>{
console.log("서버가 시작되었습니다.");
});
<!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>쿠키&세션 이해하기</title>
</head>
<body>
<form action="/login">
<input id="name" name="name" placeholder="이름을 입력하세요."/>
<button id="login">로그인</button>
</form>
</body>
</html>
'Node.js' 카테고리의 다른 글
0609 express 서버 열기 (0) | 2021.06.09 |
---|---|
0608 npm express 웹 서버 만들기 (0) | 2021.06.08 |
0608 REST API와 라우팅 (0) | 2021.06.04 |
0602 js2(array, promise,module,timeout/interval,예외처리) (0) | 2021.06.02 |
0601 Node.js (0) | 2021.06.01 |