Egg之中间件

这周估计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

加上了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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。