koa2中间件
在我看来,前端框架的中间件的思想来源于传统后端的切面编程(AOP)思想,比如我们常见的身份校验(JWT)。
axios的拦截器也是基于这种程序设计模式的。
在koa中,实际上是由一个数组对象来保存所有的中间件的,原理解析可以参考这篇博客:https://www.cnblogs.com/dashnowords/p/10439605.html。
除此之外,还得益于js的异步事件队列,关于异步事件队列,可参考这篇博客:https://www.cnblogs.com/eco-just/p/10389933.html。
中间件的事件处理可以是同步事件,也可以是异步事件,但是得注意了异步事件总是会等同步事件全部执行完成之后才会去执行(后面有个与之相关的中间件)。
一、模块化路由中间件

home.js

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

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

最终供我们app使用

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

127.0.0.1:1996/home/

针对这种情况,我们需要对接口的数据返回做一个统一的处理。
二、自定义格式化返回数据中间件

这里为什么在next()后面处理数据?应为next()函数返回一个Promise对象,then函数里面的回调是异步的,这就能保证在路由中间件里的业务逻辑一定先于此处的数据处理。
有一点需要注意的是,koa的ctx.status默认值是404,所以我们要在接口内把业务逻辑写完后修改ctx.status的值,这样,上述中间件就能对不同业务状态返回不同的格式化数据给前台。
有了该中间件之后:
localhost:1996/home

localhost:1996/home/nav

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


koa2中间件的更多相关文章
- koa2 中间件里面的next到底是什么
		
koa2短小精悍,女人不爱男人爱. 之前一只有用koa写一点小程序,自认为还吼吼哈,知道有一天某人问我,你说一下 koa或者express中间件的实现原理.然后我就支支吾吾,好久吃饭都不香. 那么了解 ...
 - 全栈项目|小书架|服务器开发-Koa2中间件机制洋葱模型了解一下
		
KOA2 是什么? Koa是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小.更富有表现力.更健壮的基石. 通过利用 asyn ...
 - koa2中间件koa和koa-compose源码分析原理(一)
		
koa是基于nodejs平台的下一代web开发框架,它是使用generator和promise,koa的中间件是一系列generator函数的对象.当对象被请求过来的时候,会依次经过各个中间件进行处理 ...
 - koa2中间件学习笔记
		
洋葱模型 整个洋葱就是服务端程序app,每层洋葱皮都是一个中间件,传入requrest,经过各个中间件处理之后传出response. 新建中间件m1.js,m2.js koa-learn/middle ...
 - iKcamp团队制作|基于Koa2搭建Node.js实战(含视频)☞ 中间件用法
		
中间件用法--讲解 Koa2 中间件的用法及如何开发中间件
 - Koa2 和 Express 中间件对比
		
koa2 中间件 koa2的中间件是通过 async await 实现的,中间件执行顺序是"洋葱圈"模型. 中间件之间通过next函数联系,当一个中间件调用 next() 后,会将 ...
 - koa2 use里面的next到底是什么
		
koa2短小精悍,女人不爱男人爱. 之前一只有用koa写一点小程序,自认为还吼吼哈,知道有一天某人问我,你说一下 koa或者express中间件的实现原理.然后我就支支吾吾,好久吃饭都不香. 那么了解 ...
 - iKcamp团队制作|基于Koa2搭建Node.js实战项目教学(含视频)☞ 环境准备
		
安装搭建项目的开发环境 视频地址:https://www.cctalk.com/v/15114357764004 文章 Koa 起手 - 环境准备 由于 koa2 已经开始使用 async/await ...
 - koa2源码解读及实现一个简单的koa2框架
		
阅读目录 一:封装node http server. 创建koa类构造函数. 二:构造request.response.及 context 对象. 三:中间件机制的实现. 四:错误捕获和错误处理. k ...
 
随机推荐
- SpringMVC——问题汇总
			
1.html页面ajax请求/login.后台报: Request method 'GET' not supported 原因: 后台请求使用了method = POST,但是url请求没有formd ...
 - 19-SQLServer定期自动导入数据的dtsx部署
			
一.注意点 1.登录Integration Service必须使用windows用户,并且只能在本地服务器登录. 2.SQLServer2000以前,叫dts,全程Data Transformatio ...
 - PHP mysqli_get_client_stats() 函数
			
定义和用法 mysqli_get_client_stats() 函数返回有关客户端每个进程的统计. 语法 mysqli_get_client_stats(); 返回有关客户端每个进程的统计: < ...
 - shell 脚本拉取svn代码,vim中文乱码解决办法
			
VIM安装成功后可以使用,但对中文是乱码,解决方法是在vim的配置文档中添加相关设置即可: 找到etc/vimrc 编辑~/.vimrc文件,加上如下几行: set fileencodings=utf ...
 - linux如何查看ip地址
			
使用命令: ifconfig -a 例如:
 - CDialog::DoModal()问题和_WIN32_WINNT
			
1.从CDialogEx派生自己的CMyDialog,到DoModal()时总提示 error C2039: "DoModal": 不是"CMyDialog"的 ...
 - Java中基本数据类型
			
在数据类型中,最常用也是最基础的数据类型,被称作基本数据类型.可以使用这些类型的值来代表一些简单的状态. Java 语言的基本数据类型总共有以下8 种,下面是按照用途划分出的4 个类别: 定点类型: ...
 - vue 循环加载动态组件以及传值
			
今天遇到一个需求,某个页面是个动态页面,由多个子组件构成. 之前我们的做法是将N个需要的组件import进主页面,然后引用一下即可.但是现在遇到的问题是, 这个动态页面存在多个业务,有的业务需要某几个 ...
 - 微信公众号【黄小斜】和【Java技术江湖】
 - HDU2795线段树入门 简单查询和修改
			
http://acm.hdu.edu.cn/showproblem.php?pid=2795 #include<iostream> using namespace std; ; int h ...