🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 简介 Koa 是一个web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。 # 应用程序 Koa 应用程序是一个包含一组中间件函数的对象,它是按照类似堆栈的方式组织和执行的。 Koa 类似于其他中间件系统,然而,一个关键的设计点是在其低级中间件层中提供高级“语法糖”。 尽管提供了相当多的有用的方法 Koa 仍保持了一个很小的体积,因为没有捆绑中间件。 必修的 hello world 应用: ~~~js const Koa = require('koa'); const app = new Koa(); app.use(async ctx => { ctx.body = 'Hello World'; }); app.listen(3000); ~~~ # 级联 Koa 中间件以更传统的方式级联,使用 async 功能,我们可以实现 “真实” 的中间件。 Koa中间件包含两个参数 ctx和next。参数next是一个函数,它的作用是将处理控制权交给下一中间件。Koa中间件采用级联代码方式执行。其中间件参数next的级联执行逻辑如图所示。 **Koa中间件执行顺序原理图** ![](https://box.kancloud.cn/fd4831628f2d9c70a2b5b45738343324_713x400.png) 下面以 “Hello World” 的响应作为示例,当请求开始时首先请求流通过`x-response-time`和`logger`中间件,然后继续移交控制给`response`中间件。当一个中间件调用`next()`则该函数暂停并将控制传递给定义的下一个中间件。当在下游没有更多的中间件执行后,堆栈将展开并且每个中间件恢复执行其上游行为。 > 中间件的执行有先后顺序。 ~~~js const Koa = require('koa'); const app = new Koa(); // 中间件 1 app.use(async (ctx, next) => { await next(); const rt = ctx.response.get('X-Response-Time'); console.log(`${ctx.method} ${ctx.url} - ${rt}`); }); // 中间件 2 app.use(async (ctx, next) => { const start = Date.now(); await next(); const ms = Date.now() - start; ctx.set('X-Response-Time', `${ms}ms`); }); // 中间件 3 app.use(async (ctx, next) => { ctx.body = 'Hello World'; }); app.listen(3000, () => {//监听3000端口 console.log('server is running at http://localhost:3000') }); ~~~