资讯专栏INFORMATION COLUMN

Koa v2.x 中文文档 从 Koa v1.x 迁移到 v2.x

fancyLuo / 641人阅读

摘要:一个迁移方式是逐个更新它们。删除特定的日志记录行为对于环境的显式检查从错误处理中删除。直接或它不再使用并已废弃。支持仍然支持分支,但应该不会得到功能性更新。除了此迁移指南外,文档将针对最新版本。

从 Koa v1.x 迁移到 v2.x

此系列文章的应用示例已发布于 GitHub: koa-docs-Zh-CN. 可以 Fork 帮助改进或 Star 关注更新. 欢迎 Star.

新的中间件签名

Koa v2 引入了新的中间件签名。

旧签名中间件(v1.x)支持将在 v3 中删除

新的中间件签名是这样的:

// 使用异步箭头方法
app.use(async (ctx, next) => {
  try {
    await next() // next 现在是一个方法
  } 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
})

你不必一定使用异步函数 - 你只需要传递一个返回 promise 的函数。返回 promise 的常规方法也可以使用!

签名已更改为通过 ctx 取代 this 显式参数传递 Context

上下文传递更改使得 koa 更能兼容 es6 的箭头函数,通过捕获 “this”。

在 v2.x 中使用 v1.x 中间件

Koa v2.x将尝试转换 app.use 上的旧签名,生成器中间件, 使用 koa-convert.
不过建议您选择尽快迁移所有 v1.x 中间件。

// Koa 将转换
app.use(function *(next) {
  const start = Date.now();
  yield next;
  const ms = Date.now() - start;
  console.log(`${this.method} ${this.url} - ${ms}ms`);
});

您也可以手动执行,在这种情况下,Koa不会转换。

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`);
}));
升级中间件

您将不得不使用新的中间件签名将您的生成器转换为异步功能:

app.use(async (ctx, next) => {
  const user = await Users.getById(this.session.user_id);
  await next();
  ctx.body = { message: "some message" };
})

升级中间件可能需要一些工作。 一个迁移方式是逐个更新它们。

将所有当前的中间件包装在 koa-convert

测试

npm outdated 看看哪个 koa 中间件已经过时了

更新一个过时的中间件,使用 koa-convert 删除

测试

重复步骤3-5,直到完成

升级你的代码

您应该开始重构代码,以便轻松迁移到 Koa v2:

各处都是 promises 返回!

不要使用 yield*

不要使用 yield {}yield [].

转换 yield []yield Promise.all([])

转换 yield {}yield Bluebird.props({})

您也可以重构 Koa 中间件功能之外的逻辑。 创建一个方法像 function* someLogic(ctx) {} 然后在你的中间件中调用 const result = yield someLogic(this).
不使用 this 将有助于迁移到新的中间件签名,所以不使用 this

应用对象构造函数需要 new

在 v1.x 中,可以直接调用应用构造函数,而不用 new 实例化一个应用程序的实例。 例如:

var koa = require("koa");
var app = module.exports = koa();

v2.x 使用 es6 类,需要使用 new 关键字。

var koa = require("koa");
var app = module.exports = new koa();
删除 ENV 特定的日志记录行为

对于 test 环境的显式检查从错误处理中删除。

依赖变化

co 不再与Koa捆绑在一起。直接 require 或 import 它.

composition 不再使用并已废弃。

v1.x 支持

仍然支持 v1.x 分支,但应该不会得到功能性更新。 除了此迁移指南外,文档将针对最新版本。

帮帮忙

如果您遇到本迁移指南未涉及的迁移相关问题,请考虑提交文档提取请求。

如果这篇文章对您有帮助, 感谢 下方点赞 或 Star GitHub: koa-docs-Zh-CN 支持, 谢谢.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/89471.html

相关文章

  • Koa v2.x 中文文档

    摘要:的对象提供了用于处理响应的方法,该响应委托给。应用对象是与的服务器和处理中间件注册的接口,从发送到中间件,默认错误处理,以及上下文,请求和响应对象的配置。 此系列文章的应用示例已发布于 GitHub: koa-docs-Zh-CN. 可以 Fork 帮助改进或 Star 关注更新. 欢迎 Star. showImg(https://segmentfault.com/img/bVNQYf...

    Cobub 评论0 收藏0
  • Koa v2.x 中文文档 常见问题

    摘要:常见问题此系列文章的应用示例已发布于可以帮助改进或关注更新欢迎替代它更像是,但是很多的好东西被转移到的中间件级别,以帮助形成更强大的基础。这使得中间件对于整个堆栈而言不仅仅是最终应用程序代码,而且更易于书写,并更不容易出错。 常见问题 此系列文章的应用示例已发布于 GitHub: koa-docs-Zh-CN. 可以 Fork 帮助改进或 Star 关注更新. 欢迎 Star. Koa...

    Paul_King 评论0 收藏0
  • Koa v2.x 中文文档 Koa 对比 Express

    摘要:使用承诺和异步功能来摆脱回调地狱的应用程序,并简化错误处理。它暴露了自己的和对象,而不是的和对象。因此,可被视为的模块的抽象,其中是的应用程序框架。这使得中间件对于整个堆栈而言不仅仅是最终应用程序代码,而且更易于书写,并更不容易出错。 Koa 与 Express 此系列文章的应用示例已发布于 GitHub: koa-docs-Zh-CN. 可以 Fork 帮助改进或 Star 关注更新...

    summerpxy 评论0 收藏0
  • Koa v2.x 中文文档 上下文(Context)

    摘要:方法抛出一个属性默认为的错误,这将允许做出适当地响应。这用于修饰其人机友好型错误并向上游的请求者报告非常有用。请注意,不支持使用此功能。这可能会破坏中间件和本身的预期功能。 上下文(Context) 此系列文章的应用示例已发布于 GitHub: koa-docs-Zh-CN. 可以 Fork 帮助改进或 Star 关注更新. 欢迎 Star. Koa Context 将 node 的 ...

    Arno 评论0 收藏0
  • Koa v2.x 中文文档 错误处理

    摘要:但是,默认错误处理程序对于大多数用例来说都是足够好的。错误侦听器接收所有中间件链返回的错误,如果一个错误被捕获并且不再抛出,它将不会被传递给错误侦听器。 错误处理 此系列文章的应用示例已发布于 GitHub: koa-docs-Zh-CN. 可以 Fork 帮助改进或 Star 关注更新. 欢迎 Star. Try-Catch 使用 async 方法意味着你可以 try-catch n...

    zgbgx 评论0 收藏0

发表评论

0条评论

fancyLuo

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<