本系列文章的应用示例已经发布在GitHub上:koa-docs-Zh-CN。您可以Fork以帮助改进或Star以关注更新。欢迎来到星空。本项目同步自koajs/koa项目文档。除特殊情况外,同步频率为每月一次。使用node.js实现HTTP中间件框架,让web应用和API写得更愉快。Koa的中间件堆栈以类似堆栈的方式流动,允许您执行下游操作,然后过滤和操作上游响应。几乎所有HTTP服务器通用的方法都直接集成到Koa的~570源代码库中。其中包括内容协商、规范节点不一致、重定向等操作。Koa不捆绑任何中间件。安装Koa依赖nodev7.6.0或ES2015及以后版本和async方法支持。$npminstallkoaHellokoaconstKoa=require('koa');constapp=newKoa();//responseapp.use(ctx=>{ctx.body='HelloKoa';});app.listen(3000);入门Kick-Off-Koa-通过一系列自学教程介绍Koa。Workshop-通过学习如何解释Koa来快速了解细节.IntroductionScreencast-开始安装Koa的介绍。中间件Koa是一个中间件框架,可以使用两种不同的功能作为中间件:asyncfunctioncommonfunction以下是每个不同功能记录器的中间件示例:asyncfunctions(nodev7.6+)app.use(async(ctx,next)=>{conststart=Date.now();awaitnext();constms=Date.now()-start;console.log(`${ctx.method}${ctx.url}-${ms}ms`);});常用函数//中间件通常有两个参数(ctx,next),ctx是请求上下文,//next是调用和执行下游中间件的函数。在代码执行完之后,通过then方法返回一个Promise.app.use((ctx,next)=>{conststart=Date.now();returnnext().then(()=>{constms=Date.now()-开始;console.log(`${ctx.method}${ctx.url}-${ms}ms`);});});Koav1.x中间件签名v1中的中间件签名。x和v2.x已更改。旧签名已被弃用。旧的签名中间件支持将在v3中删除有关从v1.x升级和使用v2.x中间件的更新信息,请参阅迁移指南。上下文、请求和响应每个中间件接收一个Koa上下文对象,该对象封装传入的http消息并相应地响应该消息。ctx通常用作上下文对象的参数名称。app.use(async(ctx,next)=>{awaitnext();});Koa提供了一个Request对象作为Context的请求属性。Koa的Request对象提供了处理http请求的方法,委托给节点http模块的IncomingMessage。下面是一个检查请求客户端xml支持的示例。app.use(async(ctx,next)=>{ctx.assert(ctx.request.accepts('xml'),406);//相当于://if(!ctx.request.accepts('xml'))ctx.throw(406);等待下一个();});Koa提供了一个Response对象作为Context的response属性。Koa的Response对象提供了处理委托给ServerResponse的http响应的方法。Koa委托给Node的请求和响应对象,而不是扩展它们。这种模式提供了更清晰的接口,减少了不同中间件和Node本身之间的冲突,并为流处理提供了更好的支持。IncomingMessage仍然可以直接访问,因为Context和ServerResponse上的req属性可以作为Context上的res属性直接访问。这是一个使用Koa的Response对象将文件流式传输为响应主体的示例。app.use(async(ctx,next)=>{awaitnext();ctx.response.type='xml';ctx.response.body=fs.createReadStream('really_large.xml');});上下文对象还提供了其请求和响应方法的快捷方式。在前面的示例中,可以使用ctx.type代替ctx.request.type,可以使用ctx.accepts代替ctx.request.accepts。有关请求、响应和上下文的更多详细信息,请参阅请求API参考、响应API参考和上下文API参考。Koa应用程序在执行newKoa()时创建的对象称为Koa应用程序对象。application对象是Koa与节点的http服务器的接口,处理中间件注册、从http发送到中间件、默认错误处理以及上下文、请求和响应对象的配置。有关应用程序对象的更多信息,请参阅应用程序API参考。文档使用指南ErrorHandlingKoaandExpressFAQMigratingfromKoav1.xtov2.xAPIDocumentation上下文(Context)请求(Request)响应(Response)KoaIntermediate如果你没有使用nodev7.6+,我们建议你配置带有babel-preset-env的babel:$npminstallbabel-registerbabel-preset-env--saveconfigurebabel-registerinyourentryfile:require('babel-register');和你的.babelrc配置:{"presets":[["env",{"targets":{"node":true}}]]}runtest$npmtest如果本文对你有帮助,请在下方点赞或starGitHub:koa-docs-Zh-CN支持,谢谢。
