단일 쿠키를 설정하고 nodejs 서버 인스턴스에 대한 각 요청과 함께 단일 쿠키를 읽을 수 있기를 원합니다. 타사 라이브러리를 가져올 필요없이 몇 줄의 코드로 수행 할 수 있습니까?
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World\n');
}).listen(8124);
console.log('Server running at http://127.0.0.1:8124/');
nodejs.org에서 직접 위의 코드를 가져 와서 쿠키를 작성하십시오.
답변
쿠키 가져 오기 / 설정에 대한 빠른 기능 액세스가 없으므로 다음 해킹을 생각해 냈습니다.
var http = require('http');
function parseCookies (request) {
var list = {},
rc = request.headers.cookie;
rc && rc.split(';').forEach(function( cookie ) {
var parts = cookie.split('=');
list[parts.shift().trim()] = decodeURI(parts.join('='));
});
return list;
}
http.createServer(function (request, response) {
// To Read a Cookie
var cookies = parseCookies(request);
// To Write a Cookie
response.writeHead(200, {
'Set-Cookie': 'mycookie=test',
'Content-Type': 'text/plain'
});
response.end('Hello World\n');
}).listen(8124);
console.log('Server running at http://127.0.0.1:8124/');
이렇게하면 모든 쿠키가 쿠키 개체에 저장되며 헤드를 작성할 때 쿠키를 설정해야합니다.
답변
많은 node.js 개발자가하는 것처럼 익스프레스 라이브러리를 사용하는 경우 더 쉬운 방법이 있습니다. 자세한 내용은 Express.js 설명서 페이지를 확인하십시오.
위의 구문 분석 예제는 작동하지만 express는이를 처리하는 훌륭한 기능을 제공합니다.
app.use(express.cookieParser());
쿠키를 설정하려면
res.cookie('cookiename', 'cookievalue', { maxAge: 900000, httpOnly: true });
쿠키를 지우려면 :
res.clearCookie('cookiename');
답변
RevNoah는 Express의 쿠키 파서 를 사용하는 것이 가장 좋습니다 . 그러나 그 대답은 이제 3 살이며 오래되었습니다.
Express를 사용하면 다음과 같이 쿠키를 읽을 수 있습니다
var express = require('express');
var cookieParser = require('cookie-parser');
var app = express();
app.use(cookieParser());
app.get('/myapi', function(req, resp) {
console.log(req.cookies['Your-Cookie-Name-Here']);
})
package.json
적절한 최신 버전으로 대체하여 다음으로 업데이트하십시오 .
"dependencies": {
"express": "4.12.3",
"cookie-parser": "1.4.0"
},
쿠키 설정 및 구문 분석과 같은 추가 작업은 여기
및 여기에 설명 되어 있습니다.
답변
@Corey Hart의 답변을 향상시키면서 다음을 parseCookies()
사용하여 다시 작성했습니다 .
- RegExp.prototype.exec- 정규식을 사용하여 “이름 = 값”문자열 구문 분석
작업 예는 다음과 같습니다.
let http = require('http');
function parseCookies(str) {
let rx = /([^;=\s]*)=([^;]*)/g;
let obj = { };
for ( let m ; m = rx.exec(str) ; )
obj[ m[1] ] = decodeURIComponent( m[2] );
return obj;
}
function stringifyCookies(cookies) {
return Object.entries( cookies )
.map( ([k,v]) => k + '=' + encodeURIComponent(v) )
.join( '; ');
}
http.createServer(function ( request, response ) {
let cookies = parseCookies( request.headers.cookie );
console.log( 'Input cookies: ', cookies );
cookies.search = 'google';
if ( cookies.counter )
cookies.counter++;
else
cookies.counter = 1;
console.log( 'Output cookies: ', cookies );
response.writeHead( 200, {
'Set-Cookie': stringifyCookies(cookies),
'Content-Type': 'text/plain'
} );
response.end('Hello World\n');
} ).listen(1234);
또한 OP는 http 모듈을 사용합니다. OP가 restify 를 사용하는 경우 restify-cookies를 사용할 수 있습니다 .
var CookieParser = require('restify-cookies');
var Restify = require('restify');
var server = Restify.createServer();
server.use(CookieParser.parse);
server.get('/', function(req, res, next){
var cookies = req.cookies; // Gets read-only cookies from the request
res.setCookie('my-new-cookie', 'Hi There'); // Adds a new cookie to the response
res.send(JSON.stringify(cookies));
});
server.listen(8080);
답변
답변
쿠키 스플리터가 쿠키 값에 ‘=’인 쿠키를 사용하려면 :
var get_cookies = function(request) {
var cookies = {};
request.headers && request.headers.cookie.split(';').forEach(function(cookie) {
var parts = cookie.match(/(.*?)=(.*)$/)
cookies[ parts[1].trim() ] = (parts[2] || '').trim();
});
return cookies;
};
개별 쿠키를 얻으려면 다음을 수행하십시오.
get_cookies(request)['my_cookie']