当前位置: 首页 > 后端技术 > Node.js

Koav2.x中文文档API

时间:2023-04-03 17:43:41 Node.js

本系列文章的应用示例已经发布在GitHub上:koa-docs-Zh-CN。您可以通过Fork帮助改进或Star以关注更新。欢迎星。相关API上下文(Context)请求(Request))响应(Response)安装Koa依赖于nodev7.6.0或ES2015及之后的版本和asyncmethod的支持。你可以使用你最喜欢的版本管理器来快速安装支持的节点版本:$nvminstall7$npmikoa$nodemy-koa-app.js使用Babel实现异步方法要在节点<7.6的Koa中使用异步方法,我们建议usingbabel'srequirehook.require('babel-register');//剩下的应用的require需要放constapp=require('./app');钩后;要解析和编译异步方法,您至少应该拥有transform-async-to-generator或transform-async-to-module-method插件。例如,在您的.在babelrc文件中,您应该有:{"plugins":["transform-async-to-generator"]}您也可以使用环境预设的目标参数"node":"current"代替。应用程序Koa应用程序是一个对象,包含一组以类似堆栈的方式组织和执行的中间件功能。Koa类似于你可能遇到的许多其他中间件系统,例如Ruby的Rack、Connect等。但是,一个关键的设计点是在其低级中间件层提供高级“语法糖”。这提高了互操作性、健壮性,并使编写中间件更加愉快。这包括常见任务的方法,例如内容协商、缓存清理、代理支持和重定向。尽管提供了很多有用的方法,但Koa仍然保持较小的体积,因为没有捆绑中间件。必需的helloworld应用程序:constKoa=require('koa');constapp=newKoa();app.use(asyncctx=>{ctx.body='HelloWorld';});app.listen(3000);cascadingKoa中间件以更传统的方式级联,你可能已经习惯了类似的工具——以前很难用户友好地使用node的回调。然而,使用异步函数,我们可以实现“真正的”中间件。与Connect的实现直接通过一系列函数传递控制直到一个函数返回相反,Koa调用“下游”,然后控制流回“上游”。以“HelloWorld”响应为例,首先请求流经过x-response-time和logging中间件询问何时开始,然后继续将控制权交给响应中间件。当中间件调用next()时,该函数暂停并将控制权传递给下一个定义的中间件。当下游不再有中间件执行时,堆栈展开,每个中间件恢复执行其上游行为。constKoa=require('koa');constapp=newKoa();//x-response-timeapp.use(async(ctx,next)=>{conststart=Date.now();awaitnext();constms=Date.now()-start;ctx.set('X-Response-Time',`${ms}ms`);});//loggerapp.use(async(ctx,next)=>{conststart=Date.now();awaitnext();constms=Date.now()-start;console.log(`${ctx.method}${ctx.url}-${ms}`);});//responseapp.use(异步ctx=>{ctx.body='HelloWorld';});app.listen(3000);settingapplicationsetting是app实例上的一个属性,目前支持如下:app.env默认为NODE_ENV或“development”app.proxy当真正的代理头字段将被信任时app.subdomainOffsetoffsetfor.subdomainstoignore[2]app.listen(...)Koa应用程序不是HTTP服务器1对1显示。可以将一个或多个Koa应用程序安装在一起,以形成具有单个HTTP服务器的更大的应用程序。创建并返回一个HTTP服务器,将给定的参数传递给Server#listen()。这些记录在nodejs.org上。这是一个绑定到端口3000的死Koa应用程序:constKoa=require('koa');constapp=newKoa();app.listen(3000);这里的app.listen(...)方法只是语法糖:consthttp=require('http');constKoa=require('koa');constapp=newKoa();http.createServer(app.callback()).listen(3000);这意味着您可以拥有与HTTP和HTTPS或多个地址相同的应用程序:consthttp=require('http');consthttps=require('https');constKoa=require('koa');constapp=newKoa();http.createServer(app.callback()).listen(3000);https.createServer(app.callback()).listen(3001);app.callback()返回适合http.createServer()方法处理请求的回调函数。您还可以使用此回调函数将koa应用程序挂载到Connect/Express应用程序中。app.use(function)将给定的中间件方法添加到此应用程序。有关更多信息,请参阅中间件。app.keys=设置签名cookie密钥。这些被传递给KeyGrip,但您也可以传递自己的KeyGrip实例。例如,以下是可以接受的:app.keys=['我是一个新秘密','我喜欢乌龟'];app.keys=newKeyGrip(['我是一个新秘密','我喜欢乌龟'],'sha256');这些密钥可以反转,并在使用{signed:true}参数对cookie进行签名时使用。ctx.cookies.set('name','tobi',{signed:true});app.contextapp.context是创建ctx的原型。您可以通过编辑app.context向ctx添加其他属性。这对于将ctx添加到整个应用程序中使用的属性或方法很有用,这可能更高效(不需要中间件)和/或更简单(更少的require()s)并且更多地依赖ctx,这可以被认为是一种反模式.例如,要从ctx添加对数据库的引用:app.context.db=db();app.use(asyncctx=>{console.log(ctx.db);});注意:ctx上的许多属性是使用getter、setter和Object.defineProperty()定义的。您只能通过在app.context上使用Object.defineProperty()来编辑这些属性(不推荐)。查看https://github.com/koajs/koa/...安装的应用程序当前使用其父级的ctx和设置。因此,安装的应用只是一套中间件。错误处理默认情况下,除非app.silent为真,否则将所有错误输出到stderr。当err.status为404或err.expose为真时,默认错误处理程序也不输出错误。要执行自定义错误处理逻辑,例如集中式日志记录,您可以添加一个“错误”事件侦听器:app.on('error',err=>{log.error('servererror',err)});如果在req/res过程中出现错误,客户端无法响应,仍然传递Context实例:app.on('error',(err,ctx)=>{log.error('servererror',err,ctx)});当发生错误并且仍然可以响应客户端,并且没有数据写入套接字时,Koa将适当地响应500“InternalServerError”。在任何一种情况下,都会发出应用程序级别的“错误”以进行日志记录。如果本文对您有帮助,请在下方点赞或StarGitHub:koa-docs-Zh-CN支持,谢谢。