에러>
TypeError [ERR_INVALID_CHAR]: Invalid character in header content ["Set-Cookie"]
문제 발생한 코드>
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;
}, {});
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);
res.writeHead(302, {
Location: '/',
'Set-Cookie' : `name=${encodeURIComponent(name)};
Expires=${expires.toGMTString()}; HttpOnly; Path=/`,
});
res.end();
} else if(cookies.name) {
res.writeHead(200, { 'Content-Type' : 'test/html; charset=utf-8'});
res.end(`${cookies.name}님 안녕하세요`);
} else {
fs.readFile('./server4.html', (err,data) => {
if(err) {
throw err;
}
res.end(data);
});
}
})
.listen(8083, () => {
console.log('8083 port waiting');
});
해결방법>
Expires 앞에 줄바꿈을 제거한다.
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;
}, {});
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);
res.writeHead(302, {
Location: '/',
'Set-Cookie' : `name=${encodeURIComponent(name)};Expires=${expires.toGMTString()}; HttpOnly; Path=/`,
});
res.end();
} else if(cookies.name) {
res.writeHead(200, { 'Content-Type' : 'test/html; charset=utf-8'});
res.end(`${cookies.name}님 안녕하세요`);
} else {
fs.readFile('./server4.html', (err,data) => {
if(err) {
throw err;
}
res.end(data);
});
}
})
.listen(8083, () => {
console.log('8083 port waiting');
});
'TIL > Node.js' 카테고리의 다른 글
TypeError: Cannot read property 'forEach' of undefined (0) | 2020.03.10 |
---|---|
throw new TypeError('JwtStrategy requires a secret or key'); (0) | 2020.03.08 |
TIL D-09 throw new TypeError('Router.use() requires a middleware function but got a ' + gettype(fn)) (0) | 2020.01.14 |
Nodejs 에러 | cannot read property 'expires' of undefined (0) | 2019.12.31 |
Nodejs | 비동기, 콜백, Promise (0) | 2019.12.11 |
댓글