我正在 Node.js 中制作一个涉及 cookie 的程序。我不想使用像express这样的库。我在网上找到了以下使用cookie的代码,但我不太确定它是如何工作的。有人可以帮我分解一下吗?另外,我不确定代码的哪一部分读取系统中的cookie以及哪一部分写入它们。您能澄清一下吗?
谢谢:
这是代码:
var http = require('http');
function parseCookies(cookie) {
return cookie.split(';').reduce(
function(prev, curr) {
var m = / *([^=]+)=(.*)/.exec(curr);
var key = m[1];
var value = decodeURIComponent(m[2]);
prev[key] = value;
return prev;
},
{ }
);
}
function stringifyCookies(cookies) {
var list = [ ];
for (var key in cookies) {
list.push(key + '=' + encodeURIComponent(cookies[key]));
}
return list.join('; ');
}
http.createServer(function (request, response) {
var 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);
最佳答案
Cookie 只是浏览器向服务器发送请求时作为 header 发送的一段文本。然后,服务器可以根据需要修改 cookie,并将它们作为 header 发送回浏览器。
Cookie 的约定是它们是由与号 (&
) 分隔的键值对,就像 URL 中的查询字符串一样(这就是 decodeURIComponent
和 encodeURIComponent
在您的示例中起作用的原因!)。
parseCookies
从 cookie 字符串读取到代表您的 cookie 的对象。例如。
// Input
"foo=bar&baz=42"
// Output
{foo: "bar", baz: 42}
stringifyCookies
获取该 cookie 对象,并将其转换回 cookie:
// Input
{foo: "bar", baz: 42}
// Output
"foo=bar&baz=42"
这有意义吗?
关于javascript - 不理解 Node.js 中的 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36877564/