博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Koa v2.x 中文文档 从 Koa v1.x 迁移到 v2.x
阅读量:6470 次
发布时间:2019-06-23

本文共 2119 字,大约阅读时间需要 7 分钟。

从 Koa v1.x 迁移到 v2.x

此系列文章的应用示例已发布于 . 可以 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 上的旧签名,生成器中间件, 使用 .

不过建议您选择尽快迁移所有 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' };})

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

  1. 将所有当前的中间件包装在 koa-convert
  2. 测试
  3. npm outdated 看看哪个 koa 中间件已经过时了
  4. 更新一个过时的中间件,使用 koa-convert 删除
  5. 测试
  6. 重复步骤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 环境的显式检查从错误处理中删除。

依赖变化

  • 不再与Koa捆绑在一起。直接 require 或 import 它.
  • 不再使用并已废弃。

v1.x 支持

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

帮帮忙

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

如果这篇文章对您有帮助, 感谢 下方点赞 或 Star 支持, 谢谢.

转载地址:http://nwjko.baihongyu.com/

你可能感兴趣的文章
HDOJ-1010 Tempter of the Bone
查看>>
JavaNIO基础02-缓存区基础
查看>>
日本开设无人机专业,打造无人机“人才市场”
查看>>
190行代码实现mvvm模式
查看>>
PXE部署实例
查看>>
cobbler初探------实现自动安装centos6.4
查看>>
兼容几乎所有浏览器的透明背景效果
查看>>
Go语言4
查看>>
jeesite 框架搭建与配置
查看>>
Adb移植(一)简单分析
查看>>
Linux VNC server的安装及简单配置使用
查看>>
阿里宣布开源Weex ,亿级应用匠心打造跨平台移动开发工具
查看>>
Android项目——实现时间线程源码
查看>>
招商银行信用卡重要通知:消费提醒服务调整,300元以下消费不再逐笔发送短信...
查看>>
python全栈_002_Python3基础语法
查看>>
C#_delegate - 调用列表
查看>>
交换机二层接口access、trunk、hybird三种模式对VLAN的处理过程
查看>>
jQuery.extend 函数详解
查看>>
[转]Windows的批处理脚本
查看>>
lnmp高人笔记
查看>>