获取并设置具有节点.js HTTP 服务器的单个 Cookie

2022-08-30 01:41:44

我希望能够设置单个cookie,并在向nodejs服务器实例发出的每个请求时读取该单个cookie。它能否在几行代码中完成,而无需拉入第三方库?

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 中获取上述代码,并在其中使用cookie。


答案 1

没有快速功能访问获取/设置cookie,所以我想出了以下技巧:

const http = require('http');

function parseCookies (request) {
    const list = {};
    const cookieHeader = request.headers?.cookie;
    if (!cookieHeader) return list;

    cookieHeader.split(`;`).forEach(function(cookie) {
        let [ name, ...rest] = cookie.split(`=`);
        name = name?.trim();
        if (!name) return;
        const value = rest.join(`=`).trim();
        if (!value) return;
        list[name] = decodeURIComponent(value);
    });

    return list;
}

const server = http.createServer(function (request, response) {
    // To Read a Cookie
    const 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);

const {address, port} = server.address();
console.log(`Server running at http://${address}:${port}`);

这会将所有 Cookie 存储到 cookie 对象中,您需要在写入 head 时设置 cookie。


答案 2

如果您使用的是 express 库,就像许多 node.js 开发人员一样,有一种更简单的方法。有关详细信息,请查看快速.js文档页面。

上面的解析示例有效,但express为您提供了一个很好的函数来处理这个问题:

app.use(express.cookieParser());

要设置饼干:

res.cookie('cookiename', 'cookievalue', { maxAge: 900000, httpOnly: true });

要清除饼干:

res.clearCookie('cookiename');