この記事では、node フレームワーク Nest.js が疎結合方式で Express をどのように統合するかについて説明します。
Nodejs は、ポートをリッスンし、http リクエストを処理し、応答を返すための http モジュールを提供します。これが主な機能です。
しかし、httpモジュールのAPIは原始的すぎて、それを元にリクエストレスポンスを直接処理するのは面倒なので、Expressなどのライブラリでカプセル化します。
この層が行うことは、さまざまなシナリオのニーズを満たすためにリクエストとレスポンスに多くのリクエストとレスポンスの処理メソッドを追加し、ルーティングを処理し、ミドルウェア呼び出しチェーンを提供することです。このミドルウェア呼び出しチェーンはオニオン モデルと呼ばれます。
#しかし、この層では、モジュールが多すぎる場合に何をすべきか、モジュールをどのように管理するかというアーキテクチャ上の問題は解決されません。モデル、ビュー、コントローラーを分割するにはどうすればよいですか?等
そこで、バックエンド サービスに Node.js を使用する場合、アーキテクチャ上の問題を解決するために別のレイヤーを追加します。このレイヤーのフレームワークには、eggjs (ant)、midwayjs (Taobao)、nestjs (foreign) が含まれます。 )。
nestjs は最高の 1 つです:
##このレイヤー 最下層Express、koa などです。これらの http フレームワークに基づいて追加のアーキテクチャ上の問題を解決するだけです。 そして、nestjs は特に優れた機能を備えており、http プラットフォームに依存せず、柔軟に切り替えることができます。 それでは、nestjs はどのようにして基盤となるプラットフォームの切り替えを実現するのでしょうか? react が vdom を Canvas、dom、およびネイティブにどのようにレンダリングするか考えてみてください。 統一インターフェイスを定義すると、さまざまなプラットフォームのレンダリング ロジックがこれらのインターフェイスを実装します。このモードをアダプターモードと呼びます。アダプター モードは、サード パーティによって実装された機能が使用される場合に使用されます。これには直接依存しませんが、サード パーティがこのインターフェイス レイヤーに適応できるようにインターフェイスのレイヤーを定義します。 。このようにして、このインターフェイス層に適応するあらゆるソリューションを統合でき、ソリューションを柔軟に切り替えることができます。
Nest.js は、基盤となる http プラットフォームのインターフェイス層 (HttpServer) を提供し、一連のメソッドを定義します。 Because theインターフェイスの ts はすべてのメソッドを実装する必要があります。これを簡素化するために、抽象クラス AbstractHttpAdapter を継承し、実装する必要があるメソッドを抽象として定義します。 Express または fastify などの他のプラットフォームは、アダプター クラスを継承し、抽象メソッドを実装している限り、Nest.js に接続できます。 たとえば、ExpressAdapter: または FastifyAdapter: これらのロジックは、platform-express および platform-fastify に配置されます。パッケージ内: Nest.js コードの最初の行は、create を呼び出すことです: create willタイプ httpAdapter を選択してサービスを作成します: デフォルトは Express です: このようにして、リクエストは応答メソッドは後で呼び出されます。結局のところ、すべて高速です。 たとえば、コントローラーでは @Request デコレーターを使用してリクエスト オブジェクトを挿入し、リクエストのさまざまなメソッドを呼び出すことができます。import { Controller, Get, Request } from '@nestjs/common'; @Controller('cats') export class CatsController { @Get() findAll(@@Request() request: Request): string { return 'This action returns all cats'; } }
import { Controller, Get, Req } from '@nestjs/common'; @Controller('cats') export class CatsController { @Get() findAll(@@Req() request: Request): string { return 'This action returns all cats'; } }
ただし、これは特定のプラットフォームと結合されるため、プラットフォームを切り替えないことが確実な場合を除き、お勧めできません。
http プラットフォームはこれを行い、同様に websocket プラットフォームも同じことを行います:
は、アダプターを介してソケットIO および WebSocket に柔軟に接続できる統合インターフェイスを定義します。スイッチ:
#http および Websocket プラットフォームの Nest.js 処理の図: 概要Node.js が提供するものhttp モジュールはポートを監視し、リクエストの応答を処理しますが、その API は原始的すぎるため、より便利なリクエストおよび応答 API を提供する層を Express 層に組み込みますが、この層ではアーキテクチャの問題は解決されません。 、IOC およびその他のアーキテクチャを使用するには、Egg.js、Midway.js、Nest.js などの高レベルのバックエンド フレームワークを使用して、別のレイヤーを含める必要があります。その中でも Nest.js が最適です。 Nest.js は、基盤となる http プラットフォームと統合するための特別な設計を行っています。アダプター モードを使用して、基盤となるプラットフォームが適応するためのインターフェイス層を提供するため、さまざまな http プラットフォームを柔軟に切り替えることができます。 ただし、プラットフォーム固有の API の使用もサポートしています。たとえば、@Req を使用して、基礎となるリクエスト オブジェクトをコントローラーに挿入できます。また、対応するプラットフォームの型パラメーターも、次の場合に渡すことができます。コンテナを作成しています。 Nest.js はデフォルトで Express を使用しますが、柔軟に他のものに切り替えることができるため、Express が使用されるというのは完全に正しいわけではありません。これがアダプターパターンの美しさです。 ノード関連の知識の詳細については、nodejs チュートリアル を参照してください。
以上がノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。