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 页面展示:

 

posted @ 2021-02-05 14:17  半遮  阅读(192)  评论(0编辑  收藏  举报