HTTP
: ๋ธ๋ผ์ฐ์ ์ ์๋ฒ๊ฐ ์ํต(request, response message)ํ๋ ํต์ ๋ฐฉ๋ฒ - stateless
Cookie
: ์๋ฒ์์ ์ ์ ๊ธฐ๋ก์ ์ ์ฅ
→ session → ์ธ์ฆ์ผ๋ก ํ์ฅ๋ ์ ์์
์ด์ Nodejs๋ฅผ ์ด์ฉํด์ count์ ์๋ฅผ ๋๋ ค๊ฐ๋ฉด์ response ํค๋๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ์์ ์ธํ ํ๋ผ๊ณ ๋ช ๋ นํ๋ค
๊ทธ๋ฆฌ๊ณ ๋ธ๋ผ์ฐ์ ๋ ์๋ฒ์ ๋ช ๋ น์ ๋ฐ๋ผ ๋ค์์ ๋ฐฉ๋ฌธํ์ ๋ count๋ฅผ 2๋ก ๋ฐ๊พผ๋ค
!! ์ฟ ํค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ด๋ค ๊ฒ ํ์ํ์ง ์์๋ณด๋ฉด !!
https://expressjs.com/en/4x/api.html#req.cookies
cookie-parser๋ฅผ ์ค์นํด์ค๋ค
let cookieParser = require('cookie-parser');
app.use(cookieParser());
๊ทธ๋ฆฌ๊ณ js ํ์ผ์ ์ด๋ ๊ฒ cookie๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๊ธฐ๋ณธ์ ์ธ ๋ถ๋ถ์ ์ถ๊ฐํด์ค๋ค
app.get('/count', function(req, res){
let count = parseInt(req.cookies.count); //๋ฌธ์๋ฅผ ์ซ์๋ก
if(!req.cookies.count){ // cookie์ ๊ฐ์ด ์๋ค๋ฉด
count=0;
}
count = count+1;
res.cookie('count', count);
res.send('count : '+ count);
})
/count๋ก ์ ๊ทผํ์ ๋ count๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด์ req.cookies.count ๋ฅผ ํตํด cookie์ count์ ์ ๊ทผํด์ ํ๋ฉด์ ์ถ๋ ฅํด์ค๋ค
req.cookie.count์ ๊ฐ์ด ์๋ค๋ฉด count ๊ฐ์๋ฅผ 0์ผ๋ก ์ค์ ํด์ค๋ค
๊ฐ์์์๋ var๋ฅผ ์ฌ์ฉํด์ ๋ณ์ ์ ์ธ์ ์์น๊ฐ ์๊ด์์์ง๋ง let์ ์ฌ์ฉํ๋ ค๋ฉด ๋ณ์ ์ ์ธ์ ๊ฐ์ฅ ์์์ ํด์ค์ผ ํ๋ค
๋ฐฉ๋ฌธ ํ์๊ฐ ์ฆ๊ฐํ ๋๋ง๋ค res.cookie๋ฅผ ์ฌ์ฉํด์ count๋ฅผ 1์ฉ ์ฆ๊ฐ์์ผ์ฃผ๊ณ , ํ๋ฉด์ ์ถ๋ ฅํด์ค๋ค
↓↓↓ ๊ทธ ๊ฒฐ๊ณผ
let products = {
1:{title: 'The history of web 1'},
2:{title: 'The next web'}
};
app.get('/products', function(req, res){
let output='';
for(let name in products){
output += `
<li>
<a href="/cart/${name}">${products[name].title}</a>
</li>
`
}
res.send(`<h1>Products</h1><ul>${output}</ul><a href="/cart">Cart</a>`);
})
์ด ๋ถ๋ถ์ ๊ฐ์๊ฐ ์ ๊ฒจ์์ด์ ์ผ๋จ ์ฝ๋๋ง ๋ฐ๋ผ ์ผ๋ค
์ฌ๊ธฐ์ products ๊ฐ์ฒด๋ id ๊ฐ์ ํด๋นํ๋ title์ ๊ฐ์ด ๋ด๊ฒจ์๋ค
/product๋ฅผ get ๋ฐฉ์์ผ๋ก ๋ผ์ฐํธ ํด์ฃผ๊ณ ! ๋ฐ๋ณต๋ฌธ์ ๋๋ ค์ 1, 2์ title์ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ณ , url์ผ๋ก ์ฐ๊ฒฐํด์ฃผ์๋ค
๋ง์ง๋ง์ผ๋ก cart ํ์ด์ง์๋ ์ฐ๊ฒฐํด์ฃผ์๋ค
์ด์ ๊ฐ ๋งํฌ๋ฅผ ํด๋ฆญํ์ ๋์ ํ์ด์ง๋ฅผ ๋ผ์ฐํธ ํด์ค๋ค
app.get('/cart/:id', function(req, res){
let id = req.params.id;
let cart;
let cart = req.cookies.cart;
if(!req.cookies.cart){
cart = {}; // ๋น ๊ฐ์ฒด - ์ ๋ณด x -> ํ๋ฒ๋ง
}
if(!cart[id]){ //์๋ id์ ์ ๊ทผํ๋ฉด
cart[id] = 0; // cnt 0์ผ๋ก ์ค์
}
cart[id] = parseInt(cart[id])+1; // ํด๋น url์ count ๋ํ๊ธฐ
res.cookie('cart', cart); // ์ฌ์ฉ์์ ์ปดํจํฐ์ cart ๊ฐ์ฒด ์ฌ๊ธฐ
res.send(cart);
})
cookie cart๊ฐ ์๋ค๋ฉด cart์ ๊ทธ๋๋ก ๋์ , ์๋ค๋ฉด ์ต์ด๋ก ์คํ๋์๋ค๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด ์์ฑ!
id๊ฐ ์๋ cart๋ผ๋ฉด 0์ผ๋ก ์ค์ ํด์ฃผ๊ณ , ํ์ฌ cart์์ 1์ ๋ํด์ค๋ค
์ด๊ฒ์ฒ๋ผ cart ๊ฐ์ฒด๋ฅผ ์ถ๋ ฅํด๋ณด๋ฉด id๊ฐ 1์ธ ์ฌ์ดํธ์ 2๋ฒ, id๊ฐ 2์ธ ์ฌ์ดํธ์ 4๋ฒ ๋ฐฉ๋ฌธํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค
res.redirect('/cart');
๊ทธ๋ฆฌ๊ณ cart ํ์ด์ง๋ก ๋ณด๋ด๊ธฐ
๋ค์์ผ๋ก๋ cart ํ์ด์ง ๋ผ์ฐํธ ํ๊ธฐ!
app.get('/cart', function(req, res){
let cart = req.cookies.cart;
let output='';
if(!cart){
res.send('Empty!');
}
else{
for(let id in cart){
output += `<li>${products[id].title} (${cart[id]})</li>`;
}
}
res.send(`
<h1>Cart</h1>
<ul>${output}</ul>
<a href="/products">Products List</a>`)
})
cart๊ฐ ๋น์ด์์ผ๋ฉด ๋น์ด์๋ค๋ ๊ฒ์ ์๋ ค์ฃผ๊ณ ,
๊ทธ๋ ์ง ์๋ค๋ฉด ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํด ๋ฌผํ์ ์ด๋ฆ๊ณผ ์นดํธ์ ์๋ฅผ output์ ๋ด์์ค๋ค
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก output์ ์ถ๋ ฅํด์ฃผ๊ณ products ํ์ด์ง๋ก ์ด๋ํ๋ ๋ฒํผ์ ๋ง๋ค์ด์ฃผ๋ฉด ๋๋ค
↓↓↓ ๊ทธ ๊ฒฐ๊ณผ
๋ง์ง๋ง์ผ๋ก ๋ณด์๊ณผ ๊ด๋ จ๋ ์ฟ ํค!!
→ cookie๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ https ๋ฐฉ์์ผ๋ก ํต์ ํ๋ ๊ฒ์ด ์ข๋ค (์ดํดํ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ํต)
→ cookie ๊ฐ ์์ฒด๋ฅผ ์ํธํ: app.use(cookieParser('134123jrehfds**(^'));
์ด๋ฐ ์์ผ๋ก cookieParser๋ฅผ ์ฌ์ฉํ๋ ๋ถ๋ถ์ ์๋ฌด ๊ฐ์ ์ ๋ ฅํด์ฃผ๋ฉด ์ ๊ฒ key ๊ฐ์ด ๋๋ค
๊ทธ๋ฆฌ๊ณ /count์์ count๋ฅผ ํ๋ ๋ฐฉ๋ฒ ๋ํ ๋ฐ๊ฟ์ฃผ๋ฉด ๋๋ค
app.use(cookieParser('134123jrehfds**(^'));
app.get('/count', function(req, res){
let count = parseInt(req.signedCookies.count); //๋ฌธ์๋ฅผ ์ซ์๋ก
if(!req.signedCookies.count){ // cookie์ ๊ฐ์ด ์๋ค๋ฉด
count=0;
}
count = count+1;
res.cookie('count', count, {signed: true});
res.send('count : '+ count);
})
req.cookies๋ฅผ ์ฐ๋ ๋ถ๋ถ์ req.signedCookies๋ก, cookie๋ฅผ ๋ง๋ค์ด ์ฃผ๋ ๋ถ๋ถ์ 3๋ฒ์งธ ์ธ์๋ก
{signed: true}๋ฅผ ์ถ๊ฐํด์ค๋ค
์ฒ์๊ณผ ๋ค๋ฅด๊ฒ Set-Cookie์์ count์ ๊ฐ์ด ์ซ์๊ฐ ์๋๊ณ ์ํธํ๋ ์ ๋ณด๋ก ๋ฐ๋๋ค!
์ค๋ ์ ์ฌ๊ธฐ๊น ์ง ! !!!
ํ์ใ ใ ์์ฆ ๊ตํํ์, ํดํ, ๋ผํผ์ ๋ฑ๋ฑ ๋๋ฉ ๋จธ๋ฆฌ๊ฐ ์ํ๋ค ํด
์ด๋ป๊ฒ ํด์ผ๋ ์ง ๋ ๊ณ ๋ฏผํด๋ด์ผ๊ฒ ๋ค
4์ผ์ ๋ผํผ์ ๊ฒฐ์ ๋๊ณ !
18์ผ์ ์๊ฐ์ ์ฒญํ๊ณ ๊ฒฐ์ ๋ ๋ฏ!!
์ค๋๋ถํฐ ์์นจ๋ง๋ค ์~๊ธ ํ ์ต ํ์ ๊ฐ์ผ๋๋๋ฐ ๊ณผ์ ๊ฐ ๋ ๋ง์ใ ใ ใ ใ ;ใ ;
๋ ํ๋ก์ ํธ๋ ํด์ผ๋๋๋ใ ใ ใ
'c o d i n g . . ๐ > Node.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Nodejs + DB ํ๊ธฐ (0) | 2022.06.19 |
---|---|
[์ํ์ฝ๋ฉ] NodeJs ํ์ฉํ๊ธฐ(2) (0) | 2021.08.09 |
[์ํ์ฝ๋ฉ] Node.js ๋ฅผ ์ด์ฉํด ์น์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค๊ธฐ(4) (0) | 2021.07.12 |
[์ํ์ฝ๋ฉ] Node.js ๋ฅผ ์ด์ฉํด ์น์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค๊ธฐ(3) (0) | 2021.07.12 |
[์ํ์ฝ๋ฉ] Node.js ๋ฅผ ์ด์ฉํด ์น์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค๊ธฐ(2) (0) | 2021.07.12 |