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

Koav2.x中文文档MigratingfromKoav1.xtov2.x

时间:2023-04-03 12:48:45 Node.js

MigratingfromKoav1.xtov2.x本系列文章的应用示例已发布在GitHub上:koa-docs-Zh-CN.可以Fork帮助改进或Star更新。欢迎来到星空。新的中间件签名Koav2引入了新的中间件签名。旧签名中间件(v1.x)支持将在v3中删除新中间件签名是这样的://使用异步箭头方法app.use(async(ctx,next)=>{try{awaitnext()//nextisnow一个方法}catch(err){ctx.body={message:err.message}ctx.status=err.status||500}})app.use(asyncctx=>{constuser=awaitUser.getById(this.session.userid)//await替换yieldctx.body=user//ctx替换this})您不必使用异步函数-您只需要传递一个返回承诺的函数。返回承诺的常规方法也可以!签名已更改为通过ctx而不是此显式参数传递上下文。通过捕获“this”,上下文传递更改使koa与es6的箭头函数更加兼容。在v2.x中使用v1.x中间件Koav2.x将尝试使用koa-convert转换生成器中间件app.use上的旧签名。但是建议您选择尽快迁移所有v1.x中间件。//Koa会转换app.use(function*(next){conststart=Date.now();yieldnext;constms=Date.now()-start;console.log(`${this.method}${this.url}-${ms}ms`);});你也可以手动完成,在这种情况下Koa不会转换。constconvert=require('koa-convert');app.use(convert(function*(next){conststart=Date.now();yieldnext;constms=Date.now()-start;console.log(`${this.method}${this.url}-${ms}ms`);}));升级中间件您必须使用新的中间件签名将生成器转换为异步函数:app.use(async(ctx,next)=>{constuser=awaitUsers.getById(this.session.user_id);awaitnext();ctx.body={message:'somemessage'};})升级中Pieces可能需要一些工作。迁移的一种方法是一个一个地更新它们。将所有当前中间件包装在koa-converttestnpmoutdated中以查看哪个koa中间件已过时更新过时的中间件,使用koa-convertremovetest重复步骤3-5直到完成升级您的代码您应该开始重构代码以便轻松迁移到Koav2:处处承诺回报!不要使用yield*不要使用yield{}或yield[]。将yield[]转换为yieldPromise.all([])将yield{}转换为yieldBluebird.props({})您还可以在Koa中间件函数之外重构逻辑。创建一个类似function*someLogic(ctx){}的方法并在您的中间件中调用constresult=yieldsomeLogic(this)。不使用它有助于迁移到新的中间件签名,所以不要使用它。应用对象构造器需要new在v1.x中,可以直接调用应用程序构造器,不需要用new实例化一个应用实例。例如:varkoa=require('koa');varapp=module.exports=koa();v2.x使用es6类,需要使用new关键字。varkoa=require('koa');varapp=module.exports=newkoa();删除ENV特定的日志记录行为从错误处理中删除了对测试环境的显式检查。Dependencychangeco不再与Koa捆绑在一起。直接要求或导入it.composition不再使用并已弃用。v1.x支持v1.x分支仍然受支持,但不应获得功能更新。除了本迁移指南之外,该文档还将针对最新版本。帮助如果您遇到本迁移指南中未涵盖的与迁移相关的问题,请考虑提交文档拉取请求。如果本文对您有帮助,请在下方点赞或StarGitHub:koa-docs-Zh-CN支持,谢谢。