加密 加密
1:新建一个js文件
const { success, fail } = require("../toast"); const jwt = require("jsonwebtoken"); const key = "web";//密钥 module.exports = function (router) { //post添加 ctx请求响应 router.post("/login", async ctx => { const { name, pwd } = ctx.request.body; if (name === "admin" && pwd === "123456") { //加密name key密钥 expiresIn有效期60秒 const token = jwt.sign({ name: "admin" }, key, { expiresIn:300 }) //Bearer token的格式 return success(ctx, "Bearer " + token); } else { return fail(ctx, "账号或密码不正确!"); } }).get("/data", async ctx => { //token验证 data路由 return success(ctx, {}); }) }
2:app.js
//### 引入类 //这个地方定义的字母首写为大写,并且要与下面的 创建路由要一致 //引入内部方法或属性 //const{方法或属性名}=require('koa'); const Koa = require('koa'); //koa框架 const Router = require('koa-router'); //Koa-router 是 koa 的一个路由中间件,它可以将请求的URL和方法 匹配到对应的响应程序或页面。 const koaBody = require('koa-body'); //解析数据 const tagRouter = require("./routers/tag.router"); const userRouter = require("./routers/user.router"); const contentRouter = require("./routers/content.router"); const jwtRouter = require("./routers/jwttest.router"); const jwt = require("jsonwebtoken"); const key = "web"; //密钥 const { fail } = require("./toast") //### 创建对象 const app = new Koa();//创建koa框架 app.use(koaBody({ //使用 strict: false //关闭严格模式 获取参数 获取非post的参数 })); app.use(async (ctx, next) => { const exp=[ '/login', '/', 'register' ];//不需要验证的地址 if (exp.includes(ctx.url)) { //如果地址在exp中 await next();//继续 return; } const authorization = ctx.headers.authorization; if (!authorization) { return fail(ctx, "请添加token信息"); } const token = authorization.split(' ')[1];//解析 try { const user = jwt.verify(token, key); //解密 if (user.name === "admin") { await next(); } else { return fail(ctx, "权限不足"); } } catch (error) { return fail(ctx, error); } }) const router = new Router();//创建路由,支持传递参数==实例化 tagRouter(router); userRouter(router); contentRouter(router); jwtRouter(router); //### use后边都是中间件 use使用中间件 next下一步 // app.use(async (ctx,next)=>{ // ctx.body='Hello Koa2'; // next(); //中间件完成之后还可以找下一个地址 // }); //### get请求 请求本页面内容 在浏览器查看 //koa支持异步调用函数 async--形参 "/"请求跟路由(根目录) // router.get("/",async (ctx)=>{ // //url参数ctx.query // console.log(ctx.url);//带参数的路由地址 // console.log(ctx.query);//获取json对象 // console.log(ctx.querystring); //获取字符串 // }) // //### post请求 在终端查看 获取test.http内容 // //postman测试后台接口 // router.post("/a",async ctx=>{ // console.log(ctx.url); // console.log(ctx.request.body); // ctx.body="请求成功" // }) // ###在服务启动前创建路由 // 调用router.routes()来组装匹配好的路由,返回一个合并好的中间件 // 调用router.allowedMethods()获得一个中间件,当发送了不符合的请求时,会返回 `405 Method Not Allowed` 或 `501 Not Implemented` app.use(router.routes()).use(router.allowedMethods()); //localhost:3000 //### listen监听 监听的是端口内的内容(也是打开端口地址) app.listen(3000, () => { console.log("http://localhost:3000") });
3:test:http
@url=http://localhost:3000 @json=Content-Type: application/json ###向后台发送数据的格式必须为json字符串 @auth=Authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiYWRtaW4iLCJpYXQiOjE2Mzg1MjE1OTIsImV4cCI6MTYzODUyMTg5Mn0.1AWZqH9UePTe33kkdQVT7kNVrG4fAuxsfEIL2jiVDlg ##############登录 POST {{url}}/login {{json}} { "name":"admin", "pwd":"123456" } ###获取数据 Get {{url}}/data {{auth}} ################tag ### 查询 GET {{url}}/tag {{auth}} ### 添加 POST {{url}}/tag {{json}} # POST json 两行之间不能加空格 #json和{}中间必须空一行 #必须加双引号 { "text":"张三" } ### 删除 DELETE {{url}}/tag {{json}} { "_id": "61a8869a2c1dabf00c737410" } #######################content ###查询内容 get {{url}}/content {{auth}} ###添加内容 POST {{url}}/content {{json}} { "title":"titletitle", "content":"contentcontentcontentcontent" } ###修改内容 PUT {{url}}/content?_id=61a88229908b15dcf22b9586 {{json}} { "top": true } ### 删除 DELETE {{url}}/content {{json}} { "_id": "61a8872e2c1dabf00c737417" } ####################user ###查询内容 get {{url}}/user {{auth}} ###添加内容 POST {{url}}/user {{json}} { "username":"杜涵雪", "password":"nky123789", "email":"1789217140@qq.com", "group":"限制会员" } ###修改内容 PUT {{url}}/user?_id=61a8875d2c1dabf00c737420 {{json}} { "username": "张凯月" } ### 删除 DELETE {{url}}/user {{json}} { "_id": "61a8875d2c1dabf00c737420" }

浙公网安备 33010602011771号