这周估计egg的内容也没有办法讲完,事情实在是太多了,也被一些事情,影响了一些心态,博主在积极的调整,尽量快的给大家更新。
一、中间件的基本概念
egg是一个koa的框架,中间件是一个函数,在请求与响应之间执行。
二、在egg中定义中间件
1、在app目录下创建middleware目录
2、在middleware中创建js文件
案例:
function checktoken(){
return async function(ctx,next){
console.log("hello middleware")
await next()
}
}
module.exports = checktoken
三、实际操作
首先在app目录下创建middleware目录,在middleware中创建js文件
然后我们js文件里面先定义中间件,和上面案例的代码一样,就不重新写一遍了。
其次,我们要使用中间件,先看一下能不能打印案例里面写的"hello middleware",我们就要写在router.js文件里面,如果要使用写的函数,就要放在路由地址和地址方法的中间,用之前我们登录的例子来说,我们就要放在获取信息接口的部分(注意,这里因为是函数,所以调用不要忘记括号)
'use strict';
/**
* @param {Egg.Application} app - egg application
*/
module.exports = app => {
const {
router,
controller
} = app;
router.post('/jwtlogin', controller.jwt.doLogin)
router.get('/jwtmessage',app.middleware.checktoken(),controller.jwt.getMessage)
};
我们点击获取数据的时候,会看到后台返回的信息是"hello middleware",说明我们写的函数被成功的调用了。
- 那么既然已经成功调用了函数,我们需要修改函数,按照我们实际需求去写
获取token以及校验token
function checktoken() {
return async function (ctx, next) {
try {
//获取token
let token = ctx.request.header.token
//校验token
let decode = ctx.app.jwt.verify(token, ctx.app.config.jwt.secret)
if (decode.name) {
await next()
} else {
ctx.body = {
code: '400',
msg: '用户校验失败'
}
}
} catch (e) {
ctx.body = {
code: '400',
msg: 'token未能通过验证'
}
}
}
}
module.exports = checktoken
既然这里我们已经写了校验token,那么之前getMessage里面的代码就不需要了,这里我也贴下一下,jwt.js代码。
const Controller = require("egg").Controller
class JwtController extends Controller {
//登录
async doLogin() {
let user = this.ctx.request.body.user
if (user.name === 'xiaoming' && user.password === '123') {
let user_jwt = {
name: user.name
}
let token = this.app.jwt.sign(user_jwt, this.app.config.jwt.secret)
this.ctx.body = {
code: '200',
token: token
}
} else {
this.ctx.body = {
code: '400',
msg: '用户名或密码错误'
}
}
}
//验证token
async getMessage() {
this.ctx.body = 'hello jwt'
}
async index() {
let user = {
username: 'xiaoming'
}
//egg-jwt 加密
//用户登录
let token = this.app.jwt.sign(user, this.app.config.jwt.secret)
try {
let decode = this.app.jwt.verify(token, this.app.config.jwt.secret)
this.ctx.body = decode
} catch (e) {
this.ctx.body = 'token未能通过验证'
}
}
}
module.exports = JwtController
-
最后我再介绍一下postman的基本用法,可以用来测试接口,打开postman,看请求是什么类型的请求,发送请求开始测试
postman接口
如图,我们看到,接口测试的结果是400,因为我们是没有请求头的,但是这里,我们可以加上请求头
加上了token,我们就能获取正确的返回值。
本文到这里也就结束了,最近博主一直在思考一些事情,因为关闭了朋友圈,所以博主打算,来一次一周计划的安排挑战,也许摆脱了一些事情,自己活的不像个自己,所以打算找回一下曾经的自己。
末尾推荐一首《平行宇宙》,是我嵩哥的歌曲,最近真的非常喜欢这首歌,感觉对这首歌,有了新的认识和评价,在一起的时间很多,但是那个时候,不懂得珍惜,因为深爱所以不联系,不想回头,因为回头的笑容带着勉强,但是很感谢你的陪伴,那段时光确实是苦中带乐,但我始终相信,在那个平行宇宙,也许我和你幸福的在一起了,虽然歌词带着悲伤和痛苦,但是嵩哥唱出了洒脱,歌之所以会变得好听,会变得有韵味,也许,正是因为,现在的你也经历了一些事情,在这里和你好好道别,从此山水不相逢,真心感谢你的陪伴。
传送门:
1、第一章 Egg框架概述:https://www.jianshu.com/p/bfdaecb5a18c
2、第二章 路由与控制器:https://www.jianshu.com/p/62edeb088d76
3、第三章 插件:https://www.jianshu.com/p/e8d39f446f46
4、第四章 用户登录状态(上) :https://www.jianshu.com/p/a43759eab484
5、第五章 用户登录状态(下) :https://www.jianshu.com/p/06937d8d1241