摘要:的对象提供了用于处理响应的方法,该响应委托给。应用对象是与的服务器和处理中间件注册的接口,从发送到中间件,默认错误处理,以及上下文,请求和响应对象的配置。
此系列文章的应用示例已发布于 GitHub: koa-docs-Zh-CN. 可以 Fork 帮助改进或 Star 关注更新. 欢迎 Star.
此项目同步自 koajs / koa 项目中的 docs. 除特殊情况, 将保持每月一次的同步频率.
用 node.js 来实现 HTTP 的中间件框架,让 Web 应用程序和 API 可以更加愉快地编写。Koa 的中间件堆栈以类似堆栈的方式流动,允许您执行下游操作,然后过滤并操纵上游的响应。
几乎所有 HTTP 服务器通用的方法都被直接集成到 Koa 大约570行源码的代码库中。其中包括比如内容协商,规范节点不一致性,重定向等其它操作。
Koa没有捆绑任何中间件。
安装Koa 依赖 node v7.6.0 或 ES2015及更高版本和 async 方法支持.
$ npm install koaHello koa
const Koa = require("koa"); const app = new Koa(); // 响应 app.use(ctx => { ctx.body = "Hello Koa"; }); app.listen(3000);入门
Kick-Off-Koa - 通过一系列自身指引的讲解介绍了 Koa。
Workshop - 通过学习 Koa 的讲解,快速领会精髓。
Introduction Screencast - 关于 Koa 安装入门的介绍。
中间件Koa 是一个中间件框架,可以将两种不同的功能作为中间件:
async function
common function
以下是每个不同功能记录器的中间件示例:
async functions (node v7.6+)app.use(async (ctx, next) => { const start = Date.now(); await next(); const ms = Date.now() - start; console.log(`${ctx.method} ${ctx.url} - ${ms}ms`); });Common function
// 中间件通常带有两个参数 (ctx, next), ctx 是一个请求的上下文, // next 是调用执行下游中间件的函数. 在代码执行完成后通过 then 方法返回一个 Promise. app.use((ctx, next) => { const start = Date.now(); return next().then(() => { const ms = Date.now() - start; console.log(`${ctx.method} ${ctx.url} - ${ms}ms`); }); });Koa v1.x 中间件签名
中间件签名在 v1.x 和 v2.x 之间已经被更改. 旧的签名已经被弃用.
旧的签名中间件支持将在 v3 中删除
请参阅 迁移指南 获取有关从 v1.x 升级并使用 v2.x 中间件的更多信息。
上下文, 请求和响应每个中间件都接收一个 Koa 的 Context 对象,该对象封装了一个传入的 http 消息,并对该消息进行了相应的响应。 ctx 通常用作上下文对象的参数名称。
app.use(async (ctx, next) => { await next(); });
Koa 提供了一个 Request 对象作为 Context 的 request 属性。
Koa的 Request 对象提供了用于处理 http 请求的方法,该请求委托给 node http 模块的IncomingMessage。
这是一个检查请求客户端 xml 支持的示例。
app.use(async (ctx, next) => { ctx.assert(ctx.request.accepts("xml"), 406); // 相当于: // if (!ctx.request.accepts("xml")) ctx.throw(406); await next(); });
Koa提供了一个 Response 对象作为 Context 的 response 属性。
Koa的 Response 对象提供了用于处理 http 响应的方法,该响应委托给 ServerResponse。
Koa 对 Node 的请求和响应对象进行委托而不是扩展它们。这种模式提供了更清晰的接口,并减少了不同中间件与 Node 本身之间的冲突,并为流处理提供了更好的支持。
IncomingMessage 仍然可以直接被访问,因为 Context 和 ServerResponse 上的 req 属性可以直接作为 Context 上的 res 属性访问。
这里是一个使用 Koa 的 Response 对象将文件作为响应体流式传输的示例。
app.use(async (ctx, next) => { await next(); ctx.response.type = "xml"; ctx.response.body = fs.createReadStream("really_large.xml"); });
Context 对象还提供了其 request 和 response 方法的快捷方式。在前面的例子中,可以使用 ctx.type 而不是 ctx.request.type,而 ctx.accepts 可以用来代替 ctx.request.accepts。
关于 Request, Response 和 Context 更多详细信息, 参阅 请求 API 参考,
响应 API 参考 和 上下文 API 参考.
在执行 new Koa() 时创建的对象被称为 Koa 应用程序对象。
应用对象是 Koa 与 node 的 http 服务器和处理中间件注册的接口,从 http 发送到中间件,默认错误处理,以及上下文,请求和响应对象的配置。
了解有关应用程序对象的更多信息请到 应用 API 参考.
文档使用指南
错误处理
Koa 与 Express
常见问题
从 Koa v1.x 迁移到 v2.x
API 文档
上下文(Context)
请求(Request)
响应(Response)
Koa 中间件列表
Babel 配置如果你正在使用的不是 node v7.6+, 我们推荐你用 babel-preset-env 配置 babel :
$ npm install babel-register babel-preset-env --save
在你入口文件配置 babel-register:
require("babel-register");
还有你的 .babelrc 配置:
{ "presets": [ ["env", { "targets": { "node": true } }] ] }运行测试
$ npm test
如果这篇文章对您有帮助, 感谢 下方点赞 或 Star GitHub: koa-docs-Zh-CN 支持, 谢谢.
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/89494.html
摘要:一个迁移方式是逐个更新它们。删除特定的日志记录行为对于环境的显式检查从错误处理中删除。直接或它不再使用并已废弃。支持仍然支持分支,但应该不会得到功能性更新。除了此迁移指南外,文档将针对最新版本。 从 Koa v1.x 迁移到 v2.x 此系列文章的应用示例已发布于 GitHub: koa-docs-Zh-CN. 可以 Fork 帮助改进或 Star 关注更新. 欢迎 Star. 新的中...
摘要:使用承诺和异步功能来摆脱回调地狱的应用程序,并简化错误处理。它暴露了自己的和对象,而不是的和对象。因此,可被视为的模块的抽象,其中是的应用程序框架。这使得中间件对于整个堆栈而言不仅仅是最终应用程序代码,而且更易于书写,并更不容易出错。 Koa 与 Express 此系列文章的应用示例已发布于 GitHub: koa-docs-Zh-CN. 可以 Fork 帮助改进或 Star 关注更新...
摘要:常见问题此系列文章的应用示例已发布于可以帮助改进或关注更新欢迎替代它更像是,但是很多的好东西被转移到的中间件级别,以帮助形成更强大的基础。这使得中间件对于整个堆栈而言不仅仅是最终应用程序代码,而且更易于书写,并更不容易出错。 常见问题 此系列文章的应用示例已发布于 GitHub: koa-docs-Zh-CN. 可以 Fork 帮助改进或 Star 关注更新. 欢迎 Star. Koa...
摘要:当中间件运行时,它必须手动调用来运行下游中间件。例如,这个中间件从读取文件名,然后在将给指定合并结果之前并行读取每个文件的内容。当你无法控制中间件的名称时,这很有用。 指南 此系列文章的应用示例已发布于 GitHub: koa-docs-Zh-CN. 可以 Fork 帮助改进或 Star 关注更新. 欢迎 Star. 本指南涵盖的 Koa 主题不与 API 直接相关,例如编写中间件的最...
摘要:但是,默认错误处理程序对于大多数用例来说都是足够好的。错误侦听器接收所有中间件链返回的错误,如果一个错误被捕获并且不再抛出,它将不会被传递给错误侦听器。 错误处理 此系列文章的应用示例已发布于 GitHub: koa-docs-Zh-CN. 可以 Fork 帮助改进或 Star 关注更新. 欢迎 Star. Try-Catch 使用 async 方法意味着你可以 try-catch n...
阅读 2651·2021-11-24 09:38
阅读 1964·2019-08-30 15:53
阅读 1160·2019-08-30 15:44
阅读 3196·2019-08-30 14:10
阅读 3556·2019-08-29 16:29
阅读 1775·2019-08-29 16:23
阅读 1082·2019-08-29 16:20
阅读 1448·2019-08-29 11:13