先来翻译一波 官网的 migration指南:
从 Koa v1.x 迁徙到 v2.x
新的中间件函数签名
Koa v2 引入了一个新的中间件签名
老的中间件签名形式 (v1.x) 将在v3版本删除
新的 middleware 签名如下:
// 用async箭头函数app.use(async (ctx, next) => { try { await next() // next不再是generator迭代器,而是一个asycn函数了 } catch (err) { ctx.body = { message: err.message } ctx.status = err.status || 500 }})app.use(async ctx => { const user = await User.getById(this.session.userid) // 用await代替yield ctx.body = user //用ctx变量代替this})
你不是只能用async函数-你只须要保障传递一个返回promise的函数
一个一般返回promise的函数照样能够工作。
这个中间件函数签名改成了传入一个严格的ctx参数 ( Context
对象),而不是用this来拜访以后申请上下文. 这个扭转使得 koa 更能兼容es6箭头函数捕捉this.
在v2.x中应用v1.x的中间件
Koa v2.x 在调用app.use的时候能够兼容generator的middleware,它应用koa-convert.来干这件事。
然而还是倡议你连忙迁徙这些v1的中间件。
// Koa会转换这种generator中间件app.use(function *(next) { const start = Date.now(); yield next; const ms = Date.now() - start; console.log(`${this.method} ${this.url} - ${ms}ms`);});
你也能够手工转换本人的中间件,这样app.use外面就不会再转换了。
const convert = require('koa-convert');app.use(convert(function *(next) { const start = Date.now(); yield next; const ms = Date.now() - start; console.log(`${this.method} ${this.url} - ${ms}ms`);}));
降级中间件
要想降级中间件,你必须把你的中间件换成这种箭头函数的async函数。
app.use(async (ctx, next) => { const user = await Users.getById(this.session.user_id); await next(); ctx.body = { message: 'some message' };})
降级中间件须要一些工作量,一个比拟好的迁徙门路是 一个个的来
- 先用
koa-convert
包裹你当初的v1版本的中间件 - 测试是否失常
- 执行
npm outdated
看看你依赖的第三方中间件有哪些过期了 - 依照下面讲的降级你的中间件,而后移除掉
koa-convert
的包裹 - 测试是否失常
- 一直反复1-5降级所有中间件
降级你的代码
迁徙到 Koa v2 你可能也要降级本人的业务代码:
- 在任何异步的中央都返回promise!
- 不要再用
yield*
不要再用
yield {}
oryield []
.- 把
yield []
换成yield Promise.all([])
- 把
yield {}
换成yield Bluebird.props({})
- 把
你也能够重构你的中间件以外的逻辑代码函数,例如写成接管ctx上下文参数的这种:function* someLogic(ctx) {}
这样在你v1的koa的中间件里这样调用:const result = yield someLogic(this)
.
先放弃应用 this
能够帮忙你将来迁徙到v2外面不必 this 的状况。
Application构造函数必须应用new运算符
在v1.x里,Application构造函数能够间接调用来实例化,例如:
var koa = require('koa');var app = module.exports = koa();
v2.x 外面构造函数用了es6的class,必须应用 new
关键字
var koa = require('koa');var app = module.exports = new koa();
ENV 指定日志行为的环境变量被移除了
错误处理时对 test
环境变量的严格查看被移除了
依赖变动
- co曾经不是内置在koa外面了(因为不须要了)。如果你须要,则须要本人引入。
- composition is 这个compose中间件的函数曾经废除了。Koa2用的是koa-compose
v1.x 的反对
The v1.x branch is still supported but should not receive feature updates. Except for this migration
guide, documentation will target the latest version.
v1.x分支还会持续反对,但不会再减少新的feature。除了这个迁徙文档,默认的官网文档都指向v2的
帮忙
如果你遇到迁徙的其余问题,能够提交pull request
todo-list利用的降级
// TODO