Koa
Koa的三个模块
- Application: 基本服务器框架
- Context: 服务器框架基本数据结构的封装,用以 http 请求解析及响应
- Middleware: 中间件,也是洋葱模型的核心机制
构建 Application
- 首先完成 Appliacation 的大体框架:
- app.listen: 处理请求及响应,并且监听端口
- app.use: 中间件函数,处理请求并完成响应
const http = require("http");
class Application {
constructor() {
this.middleware = null;
}
listen(...args) {
const server = http.createServer(this.middleware);
server.listen(...args);
}
// 这里依旧调用的是原生 http.createServer 的回调函数
use(middleware) {
this.middleware = middleware;
}
}
- 此时调用
Application
启动服务的代码如下:
const app = new Appliacation();
app.use((req, res) => {
res.end("hello, world");
});
app.listen(3000);
- 由于
app.use
的回调函数依然是原生的http.crateServer
回调函数,而在koa
中回调参数是一个Context
对象。
Koa 的中间件机制
Koa
中间件的工作原理是整个框架的核心。中间件是一些函数,这些函数能够访问请求对象(request
)、响应对象(response
)以及应用程序的请求/响应循环中的下一个中间件。在 Koa
中,中间件的执行顺序遵循一种称为 洋葱模型
的模式。
中间件的执行顺序
洋葱模型:当一个请求进入
Koa
应用时,它会从第一个中间件开始,经过每个中间件,直到找到合适的处理程序。然后,响应会回溯经过每个经过的中间件,直到最外层。这种机制就像剥洋葱一样,外层包裹着内层,因此被称为洋葱模型
。中间件的添加:在
Koa
中,中间件是使用app.use(middleware)
添加的。中间件被添加的顺序决定了它们被执行的顺序。
next 函数的作用
控制流:
next
函数是一个函数,当调用时,它将控制转移到下一个中间件。只有当next()
被调用时,后续的中间件才会执行。异步执行:
next
返回一个Promise
,这意味着你可以在中间件中使用异步函数。这允许你在当前中间件中执行代码,暂停执行直到下一个中间件完成,然后再恢复当前中间件的执行。