1、介绍

  1. cookies中文意思就是小点心的意思,作用可以记录用户信息,在同一个域下cookies是共享的
  2. 它用来保存用户的数据(账号、密码等)

2、cookies的方法

  1. ctx.cookies.set("name","value") //设置cookies中name和value值
  2. ctx.cookies.get("name") //获取cookies中的属性名为name的属性值

3、通过cookies来完成登录验证

3-1 案例要求、功能

  1. 1、必须通过登录去访问home页面,如果账号密码不对,则停留在的登录页面
  2. 2、直接访问home页面,就返回登录页面

3-2 代码

安装依赖

  1. yarn add koa koa-router art-template koa-art-template
  1. 将此项目拆分为配置文件、路由文件、pages文件、主文件入口

3-2-1 主文件

  1. const koa = require("koa")
  2. const initProject = require("./config")
  3. const app = new koa()
  4. initProject(app)
  5. app.listen(8080,()=>{
  6. console.log("8080端口打开了");
  7. })

3-2-2 配置文件

  1. const router = require("../routers/index")
  2. const render = require("koa-art-template")
  3. const path = require("path")
  4. function initProject(app){
  5. app.use(async (ctx,next)=>{
  6. console.log(ctx.path);//获取前路由地址
  7. if(ctx.path == "/login" || ctx.path == "/doLogin"){
  8. console.log("1");
  9. // 1、在登录路由
  10. await next()
  11. }else{
  12. // 2、不在登录路由
  13. if(ctx.cookies.get("login")){ //判断cookies中是否有login有就执行home页面
  14. await next()
  15. }else{
  16. await ctx.redirect("/login") //没有login就返回login页面
  17. }
  18. }
  19. })
  20. app.use(router.routes())
  21. render(app,{
  22. root:path.join(process.cwd(),'pages'),
  23. extname:'.html',
  24. debug:process.env.NODE_ENV !== 'production'
  25. })
  26. }
  27. module.exports = initProject

3-2-3 路由文件

  1. const router = require("koa-router")()
  2. router.get("/login",async ctx=>{
  3. // ctx.cookies.set("name","cheng")
  4. await ctx.render("login")
  5. })
  6. router.get("/home",async ctx=>{
  7. ctx.body = 'home'
  8. })
  9. router.get("/doLogin",async ctx=>{
  10. // username="cheng" passeord=123456
  11. console.log(ctx.query);
  12. // 1、username="cheng" passeord=123456 判断登录成功,同时设置cookies
  13. var {username,password} = ctx.query
  14. if(username == "cheng" && password == "123456"){
  15. ctx.cookies.set("login","success")
  16. await ctx.redirect("/home")
  17. } else{
  18. ctx.body = "<script>alert('用户名或密码错误');location.href='/login'</script>"
  19. }
  20. })
  21. module.exports = router

3-2-4 pages文件

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  9. </head>
  10. <body>
  11. <div class="container">
  12. <form action="/doLogin" method="get" role="form">
  13. <legend>登录页面</legend>
  14. <div class="form-group">
  15. <label for="">用户名</label>
  16. <input type="text" class="form-control" name="username" placeholder="请输入用户名">
  17. </div>
  18. <div class="form-group">
  19. <label for="">密码</label>
  20. <input type="password" class="form-control" name="password" placeholder="请输入密码">
  21. </div>
  22. <button type="submit" class="btn btn-primary">登录</button>
  23. </form>
  24. </div>
  25. </body>
  26. </html>

根据ID删除

  1. const {ObjectId} = require("mongodb");
  2. var res = await table.deleteOne({_id:ObjectId(_id)})