• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

parseCookie 부분에 대해 질문 있습니다.

18.11.08 10:43 작성 조회수 415

0

ParseCookies=(cookie~ 로 시작하는 부분에 질문있습니다.

이게 쿠키 property를 받아서 나누고 쪼개는 역할을 하는 거 같은데요,

  1. 처음에 (cookie = '') => 이 부분은 기본 쿠키값이 비어있게 설정하는 건가요?

  2. 쿠키를 ; 로 나누고, 그다음 = 으로 나눈 후에, 인자 "k" 부분 부터 이해가 안갑니다.

    여기서 인자 k는 뭔가요 ㅇ,.ㅇ;

  3. 마지막에 reduce를 해 주는 곳에서 인자 갑자기 "acc" 가 나오는데, 이 친구는 뭐를 가르키는 건가요?

이하는 쿠키 부분의 코드 입니다.

const parseCookies = (cookie = '') =>

cookie

.split(';')

.map(v => v.split('='))

.reduce((acc, [k, v]) => {

acc[k.trim()] = decodeURIComponent(v);

return acc;

}, {});

이하는 코드 전문입니다. 

```

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('='))

.reduce((acc, [k, v]) => {

acc[k.trim()] = decodeURIComponent(v);

return acc;

}, {});

const session = {};

http.createServer((req, res) => {

const cookies = parseCookies(req.headers.cookie);

if (req.url.startsWith('/login')) {

const { query } = url.parse(req.url);

const { name } = qs.parse(query);

const expires = new Date();

expires.setMinutes(expires.getMinutes() + 5);

const randomInt = +new Date();

session[randomInt] = {

name,

expires,

};

res.writeHead(302, {

Location: '/',

'Set-Cookie': session=${randomInt}; Expires=${expires.toGMTString()}; HttpOnly; Path=/,

});

res.end();

} else if (cookies.session && session[cookies.session].expires > new Date()) {

res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });

res.end(${session[cookies.session].name}님 안녕하세요);

} else {

fs.readFile('./server4.html', (err, data) => {

if (err) {

throw err;

}

res.end(data);

});

}

})

.listen(8084, () => {

console.log('8084번 포트에서 서버 대기중입니다!');

});

답변 2

·

답변을 작성해보세요.

0

ryu sin님의 프로필

ryu sin

질문자

2018.11.08

답변 감사합니다 :)

0

.map(v => v.split('='))를 했을 때

hello=zerocho 부분이, ['hello', 'zerocho']로 쪼개집니다.

k가 hello고 v가 zerocho입니다.

acc는 reduce 함수를 공부하셔야겠지만, 맨 뒷 부분 {}이 acc이고 여기에 acc[k] = v를 추가한 뒤, acc을 return하는 방식입니다.