Koajs 2.0:新世代フレームワークの新世代

KoaJSロゴ 「node.jsの次世代Webフレームワーク」-これはバージョン1.0のドキュメントに記載されています。 いいですね。2年前にプロジェクトの1つにkoaを実装した後、プログラマーは「擬似同期コード」という用語を得ました(これはコードが同期的に見えますが、実際には非同期に実行されるときです)。 どのようなナンセンスなのか、それがどのように機能するか、私はカットの下であなたに話します。



KoaJSとは



繰り返さないように:



ジェネレーターの操作の機能とyieldディレクティブを使用して、 Promiseまたは特別に設計されたthinkify関数を非同期に実行し、 yieldが呼び出されたポイントに戻って結果を返し、promise / functionの実行後にコードを実行し続けることができます。



そのようなコードの例:

//... let userId = Number(this.request.userId); let projects = yield users.getActiveProjectsByUserId(userId); // ,    for (let project of projects) { project.owners = yield projects.getProjectOwnersById(project.id); //      } this.body = yield this.render('userProjects', projects); //     //...
      
      





なぜKoaJSが必要なのですか?



Koaのアイデアは、私がすでに長い間当社に実装してきたマイクロサービスパラダイムに完全に適合しています。 フレームワークの中核は最小限であり、koaのミドルウェアコードは非常に簡単に読み取られ、理解されます。これは、チーム開発にとって非常に重要です。 ES2015機能フレームワークで積極的に使用され、以前にPHPで書いたプログラマーの精神に対する最小限のトラウマ(これらの人はコールバックが好きではありません:))。



素晴らしい、KoaJS 2.0で驚くことは何ですか?



KoaJSの基礎であったもの、つまりジェネレーター上に構築されたcoライブラリは、Koa 2の基本実装から削除されました。



Hello worldを構築しましょう

 const Koa = require('koa'); const app = new Koa(); // response app.use(ctx => { ctx.body = 'Hello Koa'; }); app.listen(3000);
      
      







ご覧のとおり、ジェネレーターはありませんが、「疑似同期コード」をどのように書くことができますか。 最も単純なケースでは、ネイティブコードを使用できます。



 app.use((ctx, next) => { const start = new Date(); return next().then(() => { const ms = new Date() - start; console.log(`${ctx.method} ${ctx.url} - ${ms}ms`); }); });
      
      





は約束、 ctxはリクエストコンテキストです。



この形式では、コールバックなしでは多くのことを実装できないため、著者は新しいasync / await syncisisを使用することを提案します。これはまだ標準になっておらず、NodeJSでネイティブにサポートされていませんが、 Babelトランスポーターで長い間実装されています。 こんな感じ

 app.use(async (ctx, next) => { const start = new Date(); await next(); const ms = new Date() - start; console.log(`${ctx.method} ${ctx.url} - ${ms}ms`); });
      
      







オプションは、 coライブラリとジェネレーターの追加の接続とともに提供されます。

 app.use(co.wrap(function *(ctx, next) { const start = new Date(); yield next(); const ms = new Date() - start; console.log(`${ctx.method} ${ctx.url} - ${ms}ms`); }));
      
      







Koa 1.xとの互換性



「sawn」ジェネレーターについて話したとき、私は完全に正確ではありませんでした。 互換性のために、koa 1.0のスタイルでミドルウェアを配置すると、koa 2.0がミドルウェアを接続して実行しますが、コンソールには「Koa deprecated Support for Generators for v3で削除されます...」つまり、すべてがバージョン3.xより前に機能します。



以下に例を示します。

 // Koa will convert app.use(function *(next) { const start = new Date(); yield next; const ms = new Date() - start; console.log(`${this.method} ${this.url} - ${ms}ms`); });
      
      







koa-convertモジュールを使用して、既存のミドルウェアを2.0形式に自分で変換することもできます。

 const convert = require('koa-convert'); app.use(convert(function *(next) { const start = new Date(); yield next; const ms = new Date() - start; console.log(`${this.method} ${this.url} - ${ms}ms`); }));
      
      







この場合、コンソールには警告が表示されないため、この方法でレガシーミドルウェアを接続することをお勧めします。



2.0にアップグレードする理由



もちろん、100%とは言えませんが、標準サービスのいずれかの半年間の安定した運用により、2.0が非常に安定しているという自信が得られます。



ミドルウェアの実装方法を選択する権利が必要です。 Koa 2.0には、ネイティブ、ジェネレーター、非同期/待機の3つの方法があります



Koa 2.0はすでに多くの一般的なミドルウェアをサポートしています。サポートしていない場合は、koa-convertを介して動作します



新しいフレームワークを今見ている場合は、小さなものをKoaにアップロードしてみてください。時間をかけて後悔することはないでしょう。



何を見る






All Articles