Set-Cookie добавить 2 куки - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть этот класс:

var qs = require('querystring');

class Cookie
{
    constructor(req, res)
    {
        this.req = req;
        this.res = res;
    }

    get(name)
    {
        if (this.has(name))
        {
            var cookies = qs.parse(this.req.headers.cookie, '; ', '=');

            return cookies[name];
        }

        return null;
    }
    set(name, value)
    {
        this.res.setHeader('Set-Cookie', `${name}=${value};`)
    }

    delete(name)
    {
        if (this.has(name)) 
        {
            this.set(name, '')
        }
    }

    has(name)
    {
        if (typeof this.req.headers.cookie !== 'undefined') 
        {
            const cookies = qs.parse(this.req.headers.cookie, '; ', '=')

            return typeof cookies[name] !== 'undefined';
        }

        return false;
    }
}

А потом я попробую это:

const http = require('http');

http.createServer((req, res) => {
  const cookie = new Cookie(req, res);
  
  cookie.set('name', 'Nikita')
  cookie.set('age', '13')
  
  res.setHeader('Content-Type', 'text/plain');
  res.write('Now you have cookies')
  res.end()
  
}).listen(8000)

Потом я посмотрел в «Редактировать это печенье» и увидел только последнее печенье (возраст = 13)

Я думаю, это потому, что в ответе есть переменная, в которой хранятся файлы cookie, и когда я использую Set-Cookie, она устанавливает значение для этой переменной, но как я могу получить переменные, которые я добавила ранее?

1 Ответ

0 голосов
/ 06 ноября 2018

Может быть только один заголовок Set-Cookie, и вы переопределяете его значение каждый раз, когда вызываете cookie.set.

Правильный подход - сохранить локальную строковую переменную в классе и добавлять к ней новую пару name=value каждый раз, когда вы вызываете cookie.set

class Cookie
{
    var cookieString = ""

    // ...

    set(name, value)
    {  
        if (cookieString) 
        { 
            cookieString += '; '
        }

        cookieString += `${name}=${value}`
        this.res.setHeader('Set-Cookie', cookieString)
    }

    //...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...