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> • <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».
См.также
Внешние ссылки