- Koa.js 教程
- Koa.js - 主页
- Koa.js - 概述
- Koa.js - 环境
- Koa.js - 你好世界
- Koa.js - 生成器
- Koa.js - 路由
- Koa.js - URL 构建
- Koa.js - HTTP 方法
- Koa.js - 请求对象
- Koa.js - 响应对象
- Koa.js - 重定向
- Koa.js - 错误处理
- Koa.js - 级联
- Koa.js - 模板
- Koa.js - 表单数据
- Koa.js - 文件上传
- Koa.js - 静态文件
- Koa.js - Cookie
- Koa.js - 会话
- Koa.js - 身份验证
- Koa.js - 压缩
- Koa.js - 缓存
- Koa.js - 数据库
- Koa.js - RESTful API
- Koa.js - 日志记录
- Koa.js - 脚手架
- Koa.js - 资源
- Koa.js 有用资源
- Koa.js - 快速指南
- Koa.js - 有用的资源
- Koa.js - 讨论
Koa.js - 级联
中间件函数是可以访问上下文对象和应用程序请求-响应周期中的下一个中间件函数的函数。这些函数用于修改请求和响应对象以执行诸如解析请求正文、添加响应标头等任务。Koa 更进一步,生成'downstream',然后将控制流回'upstream'。这种效应称为级联。
以下是中间件功能实际运行的简单示例。
var koa = require('koa'); var app = koa(); var _ = router(); //Simple request time logger app.use(function* (next) { console.log("A new request received at " + Date.now()); //This function call is very important. It tells that more processing is //required for the current request and is in the next middleware function/route handler. yield next; }); app.listen(3000);
服务器上的每个请求都会调用上述中间件。因此,每次请求后,我们都会在控制台中收到以下消息。
A new request received at 1467267512545
要将其限制为特定路由(及其所有子路由),我们只需要像路由一样创建路由。实际上这些中间件只是处理我们的请求。
例如,
var koa = require('koa'); var router = require('koa-router'); var app = koa(); var _ = router(); //Simple request time logger _.get('/request/*', function* (next) { console.log("A new request received at " + Date.now()); yield next; }); app.use(_.routes()); app.listen(3000);
现在,每当您请求“/request”的任何子路由时,它才会记录时间。
中间件调用顺序
Koa 中中间件最重要的事情之一是它们在文件中写入/包含的顺序就是它们在下游执行的顺序。一旦我们在中间件中点击了yield语句,它就会切换到下一个中间件,直到到达最后一个。然后我们再次开始从yield语句返回并恢复函数。
例如,在下面的代码片段中,第一个函数首先执行直到yield,然后执行第二个中间件直到yield,然后是第三个。由于这里不再有中间件,因此我们开始向上移动,以相反的顺序执行,即第三、第二、第一。这个例子总结了如何以 Koa 的方式使用中间件。
var koa = require('koa'); var app = koa(); //Order of middlewares app.use(first); app.use(second); app.use(third); function *first(next) { console.log("I'll be logged first. "); //Now we yield to the next middleware yield next; //We'll come back here at the end after all other middlewares have ended console.log("I'll be logged last. "); }; function *second(next) { console.log("I'll be logged second. "); yield next; console.log("I'll be logged fifth. "); }; function *third(next) { console.log("I'll be logged third. "); yield next; console.log("I'll be logged fourth. "); }; app.listen(3000);
当我们运行此代码后访问“/”时,在我们的控制台上我们将得到 -
I'll be logged first. I'll be logged second. I'll be logged third. I'll be logged fourth. I'll be logged fifth. I'll be logged last.
下图总结了上面示例中实际发生的情况。
现在我们知道如何创建自己的中间件,让我们讨论一些最常用的社区创建的中间件。
第三方中间件
此处提供了用于 Express 的第三方中间件列表。以下是一些最常用的中间件 -
- koa-bodyparser
- koa路由器
- 相思树静态
- koa 压缩
我们将在后续章节中讨论多个中间件。