Node-RED:Рецепты/Как работать с куки

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Версия для печати больше не поддерживается и может содержать ошибки обработки. Обновите закладки браузера и используйте вместо этого функцию печати браузера по умолчанию.

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Как работать с куки[1]

Проблема

Вам нужно создать HTTP-поток, использующий куки.

Решение

У сообщений, отправляемых нодой «HTTP in», есть свойство «msg.req.cookies», содержащее список куки, сохраненных в текущем запросе.

Нода «HTTP response» будет использовать свойство «msg.cookies» для сохранения и очищения куки.

Пример

[{"id":"c362b989.954ae8","type":"http in","z":"3045204d.cfbae","name":"","url":"/hello-cookie","method":"get","swaggerDoc":"","x":130,"y":1020,"wires":[["21ddf71f.d00518"]]},{"id":"21ddf71f.d00518","type":"function","z":"3045204d.cfbae","name":"Format cookies","func":"msg.payload = JSON.stringify(msg.req.cookies,null,4);\nreturn msg;","outputs":1,"noerr":0,"x":340,"y":1020,"wires":[["f3aa98c1.befc18"]]},{"id":"f3aa98c1.befc18","type":"template","z":"3045204d.cfbae","name":"page","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"<html>\n    <head></head>\n    <body>\n        <h1>Cookies</h1>\n        <p></p><a href=\"hello-cookie/add\">Add a cookie</a> &bull; <a href=\"hello-cookie/clear\">Clear cookies</a></p>\n        <pre>{{ payload }}</pre>\n    </body>\n</html>","x":530,"y":1020,"wires":[["f52e2880.180968"]]},{"id":"f52e2880.180968","type":"http response","z":"3045204d.cfbae","name":"","x":750,"y":1020,"wires":[]},{"id":"9a2a9a4.0fc0768","type":"change","z":"3045204d.cfbae","name":"Redirect to /hello-cookie","rules":[{"t":"set","p":"statusCode","pt":"msg","to":"302","tot":"num"},{"t":"set","p":"headers","pt":"msg","to":"{}","tot":"json"},{"t":"set","p":"headers.location","pt":"msg","to":"/hello-cookie","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":550,"y":1080,"wires":[["f52e2880.180968"]]},{"id":"afefb90.53dcf48","type":"function","z":"3045204d.cfbae","name":"Add a cookie","func":"msg.cookies = { };\nmsg.cookies[\"demo-\"+(Math.floor(Math.random()*1000))] = Date.now();\nreturn msg;","outputs":1,"noerr":0,"x":330,"y":1060,"wires":[["9a2a9a4.0fc0768"]]},{"id":"d5205a2c.db9018","type":"function","z":"3045204d.cfbae","name":"Clear cookies","func":"// Find demo cookies and clear them\nvar cookieNames = Object.keys(msg.req.cookies).filter(function(cookieName) { return /^demo-/.test(cookieName);});\nmsg.cookies = {};\n\ncookieNames.forEach(function(cookieName) {\n    msg.cookies[cookieName] = null;\n});\n\nreturn msg;","outputs":1,"noerr":0,"x":340,"y":1100,"wires":[["9a2a9a4.0fc0768"]]},{"id":"fda60c66.04975","type":"http in","z":"3045204d.cfbae","name":"","url":"/hello-cookie/add","method":"get","swaggerDoc":"","x":140,"y":1060,"wires":[["afefb90.53dcf48"]]},{"id":"35285a76.1f8636","type":"http in","z":"3045204d.cfbae","name":"","url":"/hello-cookie/clear","method":"get","swaggerDoc":"","x":140,"y":1100,"wires":[["d5205a2c.db9018"]]}]

В примере выше созданы три конечные HTTP-точки:

  • «/hello-cookie» – возвращает страницу со списком всех созданных куки
  • «/hello-cookie/add» – добавляет новую куки и перенаправляет обратно на «/hello-cookie»
  • «/hello-cookie/clear» – очищает все куки, созданные этим примером, и перенаправляет обратно на «/hello-cookie»

Разбор

Свойство «msg.req.cookies» – это объект с парами «ключ/значение», содержащий куки, которые были созданы в текущем запросе.

var mySessionId = msg.req.cookies['sessionId'];

Чтобы создать куки в ответе, в свойстве «msg.cookies» должен храниться похожий объект с парами «ключ/значение».

Значение может быть либо строкой (чтобы задать значение куки при помощи настроек по умолчанию), либо объектом с опциями.

Пример ниже задает две куки: одну с названием «name» и значением «Nick», а вторую – с названием «session», значением «1234» и сроком действия 15 минут.

msg.cookies = {
    name: 'nick',
    session: {
        value: '1234',
        maxAge: 900000
    }
}

Здесь могут быть следующие настройки:

  • «domain» (String) – доменное имя для куки
  • «expires» (Date) – время действия куки в среднем времени по Гринвичу (GMT). Если не задано или задано «0», создает сессионную куки
  • «maxAge» (String) – время действия куки относительно текущего времени в миллисекундах
  • «path» (String) – путь для куки. Значение по умолчанию: «/»
  • «value» (String) – значение для куки

Чтобы удалить куки, выставьте ее значение на «null».

См.также

Внешние ссылки