koa【09】 Koa2 Cookie的使用
目录结构:
app.js
// cookies 参数说明: /* 1:maxAge : 数字【从Date.now() 得到的毫秒数,表示多少毫秒后cookie过期】。 2:expires : 一个 Date 对象, 表示 cookie 的到期日期 (默认情况下在会话结束时过期)。 3: path : cookie 路径,默认是 "/" , 表示在相同域名下的所有页面都可以获取到该cookie‘;如果写上 /user ,则仅在 /user 下能获取。 4:secure : 安全 cookie ,默认为false,设置成 true 表示只有在 https 下能访问。 5:httpOnly : 是否只是服务器可以访问cookie,默认是true【仅在服务器可访问】。 6:overwrite : 一个布尔值,表示是否覆盖以前设置的同名 cookie (默认false), 如果是 true ,在同一个请求中设置相同名称的所有 cookie(不管是路径还是域)是否在设置此 cookie 时候从 Set-Cookie 标头中过滤掉。 */ /* cookie 值为 中文 的时候: 示例: console.log(new Buffer("张三").toString("base64")); //转换成 base64 字符,输出: 5byg5LiJ console.log(new Buffer("5byg5LiJ","base64").toString()); //把base64还原成中文 ,输出:张三 */ // koa 下的cookies 简单配置方法,maxAge 单位是毫秒 // ctx.cookies.set("username", "jack", { maxAge: 1000 * 60 * 2 }); /* 字面意思就容易理解:Buffer(), 请改用Buffer.alloc(),Buffer.allocUnsafe()或Buffer.from()方法。这是由于在 Node.js ≤ 4.4.x 和 5.0.0 — 5.9.x 版本中不再支持。 主要问题的怎么对应,例如new Buffer(8),new Buffer(’buffer‘)等等,需要转换成对应细化后方法。 文档 https://nodejs.org/zh-cn/docs/guides/buffer-constructor-deprecation/ 文档中的说明 对于 new Buffer(number), 请用 Buffer.alloc(number) 替换。 对于 new Buffer(string) (或 new Buffer(string, encoding)),请用对应的 Buffer.from(string) (或 Buffer.from(string, encoding))进行替换。 对于其它情况(一般极为罕见)中使用了 new Buffer(…arguments) 的,请用 Buffer.from(…arguments) 进行替换。 */ const Koa = require("koa"); const router = require("koa-router")(); const render = require("koa-art-template"); const views = require("koa-views"); const static = require("koa-static"); const path = require("path"); const app = new Koa(); // 配置静态web目录 app.use(static("static")); // 配置 art-template 模板引擎 render(app, { root: path.join(__dirname, "view"), extname: ".html", debug: process.env.NODE_ENV !== "production", }); router.get("/", async (ctx) => { // ------------ ctx.cookies.set("name1", "jacky", { maxAge: 1000 * 60 * 60 * 24 * 40, //多少毫秒后过期,跟expires同时设置的时候,显示的是maxAge的值。 // path: "/user", //仅限于 /user 路径下可以获取到该cookie // domain: ".baidu.com" /*正常情况下不需要设置,默认就是当前域名下的所有页面都可以访问*/, /* a.baidu.com 和 b.baidu.com 共享cookie, */ // expires: new Date("2021-11-07 18:16:34 Z"), }); // ------------ // ctx.cookies.set("username", "阿萨法", { maxAge: 1000 * 60 * 2});//报错, /*存储值为汉字的cookie(nodejs的cookie是不支持直接存储汉字的) 先转化为buffer(let a = new Buffer("张三")) 再转化为汉字字符串(.toString()) 如下: */ // let buf = Buffer.alloc(256); // len = buf.write("李四"); // ctx.cookies.set("username", len, { // maxAge: 1000 * 60 * 2, // }); // let enName = ctx.cookies.get("username"); let enName = "jacky"; let name = "张三"; let age = 60; await ctx.render("index", { enName: enName, name: name, age: age }); }); router.get("/user", async (ctx) => { let enName = ctx.cookies.get("name1"); await ctx.render("user", { enName }); }); // 启动路由 app.use(router.routes()).use(router.allowedMethods()); app.listen(3007); console.log("http://127.0.0.1:3007");
app2.js 【 cookie 中文 传值 】
const Koa = require("koa"); const router = require("koa-router")(); const render = require("koa-art-template"); const views = require("koa-views"); const static = require("koa-static"); const path = require("path"); const app = new Koa(); // 配置静态web目录 app.use(static("static")); // 配置 art-template 模板引擎 render(app, { root: path.join(__dirname, "view"), extname: ".html", debug: process.env.NODE_ENV !== "production", }); router.get("/", async (ctx) => { // ------------ let cnNameSwk = new Buffer.from("孙悟空").toString("base64"); ctx.cookies.set("cnName", cnNameSwk, { maxAge: 1000 * 60 * 30, }); console.log(cnNameSwk); // ctx.cookies.set("cnName", cnNameSwk, { // expires: new Date("2028-11-07 18:16:34 Z"), // }); let cnName = ctx.cookies.get("cnName"); let enName = "jacky"; let age = 60; await ctx.render("index", { enName: enName, age: age, cnName }); }); router.get("/user", async (ctx) => { let cnNameBase64 = ctx.cookies.get("cnName"); let cnName = new Buffer.from(cnNameBase64, "base64").toString(); console.log(cnNameBase64); console.log(cnName); await ctx.render("user", { cnName }); }); // 启动路由 app.use(router.routes()).use(router.allowedMethods()); app.listen(3007); console.log("http://127.0.0.1:3007");
view/index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>koa cookies</title> </head> <body> <h1>这是index.html 模板</h1> <hr> <%=cnName%>的年龄:<%=age%>岁;英文名: <%=enName%> ; <hr> </body> </html>
index 页面展示:
view/user.html
<h4>这里是user.html模板</h4> <div> <%=cnName%>的年龄:<%=age%>岁;英文名: <%=enName %> ; </div>
user 页面展示: