koa2 mysql 中间件_koa2中间件

在我看来,前端框架的中间件的思想来源于传统后端的切面编程(AOP)思想,比如我们常见的身份校验(JWT)。

axios的拦截器也是基于这种程序设计模式的。

中间件的事件处理可以是同步事件,也可以是异步事件,但是得注意了异步事件总是会等同步事件全部执行完成之后才会去执行(后面有个与之相关的中间件)。

一、模块化路由中间件

5b2022f18085ee4b7a4f2f2ceb53baa7.png

home.js

00876f65a2783e148c0949335d7f07ad.png

一个home路由下,有两个请求地址,一个啥都不写,另一个写了点数据,并将这个koa-router当作模块暴露出去

index.js

0732d74e1d7d1ef50ec23487764789bd.png

这也是一个路由,路由包路由,并添加了一个父路径--“/home”.并且将这个路由暴露出去

ce8a50c4e0f8a5b4e192b86f8214c627.png

最终供我们app使用

36cae1554a2a49f8170e5fd35d202353.png

此时,我们访问127.0.0.1:1996/home/nav

536cc2e0044c91a6eb4187ab76b5e64b.png

127.0.0.1:1996/home/

422f490faa344efb9ba1195f46d4bfe1.png

针对这种情况,我们需要对接口的数据返回做一个统一的处理。

二、自定义格式化返回数据中间件

5b70be0c2cd12fbe6193f032d2276647.png

这里为什么在next()后面处理数据?应为next()函数返回一个Promise对象,then函数里面的回调是异步的,这就能保证在路由中间件里的业务逻辑一定先于此处的数据处理。

有一点需要注意的是,koa的ctx.status默认值是404,所以我们要在接口内把业务逻辑写完后修改ctx.status的值,这样,上述中间件就能对不同业务状态返回不同的格式化数据给前台。

有了该中间件之后:

localhost:1996/home

e2e97530fe66018f76bdd05cfe5415f2.png

localhost:1996/home/nav

edc564cff1f9e2692c29d15a45258867.png

另外,如果你觉得根据业务逻辑来修改ctx.status的值很麻烦的话,可以适当封装工具类来达到目的,例如下面这个工具类:

a35305be06256ed1ee87fd951152661d.png

f7b649283c54a4b398186a6b69e66e6a.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值