javascript - 不理解 Node.js 中的 Cookie

标签 javascript node.js cookies

我正在 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 中的查询字符串一样(这就是 decodeURIComponentencodeURIComponent 在您的示例中起作用的原因!)。

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/

相关文章:

javascript - Node js array.push 'not' 工作

javascript - 如何制作一个可以使用 Raphaël 写字的简单编辑器

javascript - 如何在 NodeJS 中从 MySQL 查询中生成嵌套 JSON 结果?

javascript - css 切换 vs. css 改变

javascript - Loopback组件存储移动设备/ postman 上传的文件

javascript - 在响应中设置 cookie header 但未在浏览器中设置

php - Chrome 浏览器 cookie/重定向问题

cookies - 网络信标(网络错误)如何工作?

javascript - 无法在 JavaScript 中使用此选择功能

javascript - 如何创建自定义类型数组 typescript