1、介绍
cookies中文意思就是小点心的意思,作用可以记录用户信息,在同一个域下cookies是共享的
它用来保存用户的数据(账号、密码等)
2、cookies的方法
ctx.cookies.set("name","value") //设置cookies中name和value值
ctx.cookies.get("name") //获取cookies中的属性名为name的属性值
3、通过cookies来完成登录验证
3-1 案例要求、功能
1、必须通过登录去访问home页面,如果账号密码不对,则停留在的登录页面
2、直接访问home页面,就返回登录页面
3-2 代码
安装依赖
yarn add koa koa-router art-template koa-art-template
将此项目拆分为配置文件、路由文件、pages文件、主文件入口
3-2-1 主文件
const koa = require("koa")
const initProject = require("./config")
const app = new koa()
initProject(app)
app.listen(8080,()=>{
console.log("8080端口打开了");
})
3-2-2 配置文件
const router = require("../routers/index")
const render = require("koa-art-template")
const path = require("path")
function initProject(app){
app.use(async (ctx,next)=>{
console.log(ctx.path);//获取前路由地址
if(ctx.path == "/login" || ctx.path == "/doLogin"){
console.log("1");
// 1、在登录路由
await next()
}else{
// 2、不在登录路由
if(ctx.cookies.get("login")){ //判断cookies中是否有login有就执行home页面
await next()
}else{
await ctx.redirect("/login") //没有login就返回login页面
}
}
})
app.use(router.routes())
render(app,{
root:path.join(process.cwd(),'pages'),
extname:'.html',
debug:process.env.NODE_ENV !== 'production'
})
}
module.exports = initProject
3-2-3 路由文件
const router = require("koa-router")()
router.get("/login",async ctx=>{
// ctx.cookies.set("name","cheng")
await ctx.render("login")
})
router.get("/home",async ctx=>{
ctx.body = 'home'
})
router.get("/doLogin",async ctx=>{
// username="cheng" passeord=123456
console.log(ctx.query);
// 1、username="cheng" passeord=123456 判断登录成功,同时设置cookies
var {username,password} = ctx.query
if(username == "cheng" && password == "123456"){
ctx.cookies.set("login","success")
await ctx.redirect("/home")
} else{
ctx.body = "<script>alert('用户名或密码错误');location.href='/login'</script>"
}
})
module.exports = router
3-2-4 pages文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<form action="/doLogin" method="get" role="form">
<legend>登录页面</legend>
<div class="form-group">
<label for="">用户名</label>
<input type="text" class="form-control" name="username" placeholder="请输入用户名">
</div>
<div class="form-group">
<label for="">密码</label>
<input type="password" class="form-control" name="password" placeholder="请输入密码">
</div>
<button type="submit" class="btn btn-primary">登录</button>
</form>
</div>
</body>
</html>
根据ID删除
const {ObjectId} = require("mongodb");
var res = await table.deleteOne({_id:ObjectId(_id)})