您希望创建一个使用 Cookie 的 HTTP 流。
HTTP In
节点发送的消息中包含 msg.req.cookies
属性,该属性列出了当前请求上设置的 Cookie。
HTTP Response
节点将使用 msg.cookies
属性来设置或清除 Cookie。
HTTP Request
节点将接受一个包含要随该请求发送的 Cookie 的输入属性 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
返回一个列出当前设置的 Cookie 的页面/hello-cookie/add
添加一个新的 Cookie 并重定向回 /hello-cookie
/hello-cookie/clear
清除示例创建的所有 Cookie 并重定向回 /hello-cookie
msg.req.cookies
属性是一个键/值对对象,其中包含当前请求上设置的 Cookie。
var mySessionId = msg.req.cookies['sessionId'];
为了在响应中设置 Cookie,应将 msg.cookies
属性设置为类似的键/值对象。
该值可以是字符串(用默认选项设置 Cookie 的值),也可以是选项对象。
以下示例设置了两个 Cookie - 一个名为 name
,值为 Nick
;另一个名为 session
,值为 1234
,有效期设置为 15 分钟。
msg.cookies = {
name: 'nick',
session: {
value: '1234',
maxAge: 900000
}
}
有效选项包括
domain
- (字符串) Cookie 的域名expires
- (日期) 以 GMT 表示的有效期。如果未指定或设置为 0,则创建会话 CookiemaxAge
- (字符串) 有效期,以毫秒为单位,相对于当前时间path
- (字符串) Cookie 的路径。默认为 /value
- (字符串) 用于 Cookie 的值要删除 Cookie,请将其值设置为 null。
HTTP Request
节点将接受 Cookie 中 encode : false
属性,这将避免在请求中发送时对值进行 URL 编码
msg.cookies = {
myCookie : {
Path : "/",
value : "ysjLVJA==",
encode : false
}
}
版权所有 OpenJS 基金会 和 Node-RED 贡献者。保留所有权利。OpenJS 基金会 已注册商标并使用商标。有关 OpenJS 基金会 商标列表,请参阅我们的商标政策和商标列表。未在OpenJS 基金会商标列表中指明的商标和徽标是其各自所有者的商标™ 或注册® 商标。使用它们不表示与其有任何关联或获得其认可。
OpenJS 基金会 | 使用条款 | 隐私政策 | OpenJS 基金会章程 | 商标政策 | 商标列表 | Cookie 政策