この記事では、node フレームワーク Nest.js が疎結合方式で Express をどのように統合するかについて説明します。
![ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。](https://img.php.cn/upload/article/000/000/024/621f5a68491c8959.jpg)
Nodejs は、ポートをリッスンし、http リクエストを処理し、応答を返すための http モジュールを提供します。これが主な機能です。
しかし、httpモジュールのAPIは原始的すぎて、それを元にリクエストレスポンスを直接処理するのは面倒なので、Expressなどのライブラリでカプセル化します。
この層が行うことは、さまざまなシナリオのニーズを満たすためにリクエストとレスポンスに多くのリクエストとレスポンスの処理メソッドを追加し、ルーティングを処理し、ミドルウェア呼び出しチェーンを提供することです。このミドルウェア呼び出しチェーンはオニオン モデルと呼ばれます。
![164622165870839ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。 ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。](https://img.php.cn/upload/image/942/848/280/164622165870839%E3%83%8E%E3%83%BC%E3%83%89%20%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%20Nest.js%20%E3%81%8C%20Express%20%E3%82%92%E7%96%8E%E7%B5%90%E5%90%88%E3%81%A7%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E7%B5%B1%E5%90%88%E3%81%99%E3%82%8B%E3%81%8B%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E8%A9%B1%E3%81%97%E3%81%BE%E3%81%97%E3%82%87%E3%81%86%E3%80%82)
#しかし、この層では、モジュールが多すぎる場合に何をすべきか、モジュールをどのように管理するかというアーキテクチャ上の問題は解決されません。モデル、ビュー、コントローラーを分割するにはどうすればよいですか?等
そこで、バックエンド サービスに Node.js を使用する場合、アーキテクチャ上の問題を解決するために別のレイヤーを追加します。このレイヤーのフレームワークには、eggjs (ant)、midwayjs (Taobao)、nestjs (foreign) が含まれます。 )。
nestjs は最高の 1 つです:
![164622166586729ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。 ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。](https://img.php.cn/upload/image/369/715/951/164622166586729%E3%83%8E%E3%83%BC%E3%83%89%20%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%20Nest.js%20%E3%81%8C%20Express%20%E3%82%92%E7%96%8E%E7%B5%90%E5%90%88%E3%81%A7%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E7%B5%B1%E5%90%88%E3%81%99%E3%82%8B%E3%81%8B%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E8%A9%B1%E3%81%97%E3%81%BE%E3%81%97%E3%82%87%E3%81%86%E3%80%82)
![164622166732137ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。 ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。](https://img.php.cn/upload/image/749/282/251/164622166732137%E3%83%8E%E3%83%BC%E3%83%89%20%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%20Nest.js%20%E3%81%8C%20Express%20%E3%82%92%E7%96%8E%E7%B5%90%E5%90%88%E3%81%A7%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E7%B5%B1%E5%90%88%E3%81%99%E3%82%8B%E3%81%8B%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E8%A9%B1%E3%81%97%E3%81%BE%E3%81%97%E3%82%87%E3%81%86%E3%80%82)
![164622167016249ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。 ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。](https://img.php.cn/upload/image/113/359/965/164622167016249%E3%83%8E%E3%83%BC%E3%83%89%20%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%20Nest.js%20%E3%81%8C%20Express%20%E3%82%92%E7%96%8E%E7%B5%90%E5%90%88%E3%81%A7%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E7%B5%B1%E5%90%88%E3%81%99%E3%82%8B%E3%81%8B%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E8%A9%B1%E3%81%97%E3%81%BE%E3%81%97%E3%82%87%E3%81%86%E3%80%82)
##このレイヤー 最下層Express、koa などです。これらの http フレームワークに基づいて追加のアーキテクチャ上の問題を解決するだけです。
そして、nestjs は特に優れた機能を備えており、http プラットフォームに依存せず、柔軟に切り替えることができます。
それでは、nestjs はどのようにして基盤となるプラットフォームの切り替えを実現するのでしょうか?
react が vdom を Canvas、dom、およびネイティブにどのようにレンダリングするか考えてみてください。
統一インターフェイスを定義すると、さまざまなプラットフォームのレンダリング ロジックがこれらのインターフェイスを実装します。このモードをアダプターモードと呼びます。
アダプター モードは、サード パーティによって実装された機能が使用される場合に使用されます。これには直接依存しませんが、サード パーティがこのインターフェイス レイヤーに適応できるようにインターフェイスのレイヤーを定義します。 。このようにして、このインターフェイス層に適応するあらゆるソリューションを統合でき、ソリューションを柔軟に切り替えることができます。
Nest.js は、基盤となる http プラットフォームのインターフェイス層 (HttpServer) を提供し、一連のメソッドを定義します。
![164622167751418ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。 ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。](https://img.php.cn/upload/image/192/271/550/164622167751418%E3%83%8E%E3%83%BC%E3%83%89%20%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%20Nest.js%20%E3%81%8C%20Express%20%E3%82%92%E7%96%8E%E7%B5%90%E5%90%88%E3%81%A7%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E7%B5%B1%E5%90%88%E3%81%99%E3%82%8B%E3%81%8B%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E8%A9%B1%E3%81%97%E3%81%BE%E3%81%97%E3%82%87%E3%81%86%E3%80%82)
Because theインターフェイスの ts はすべてのメソッドを実装する必要があります。これを簡素化するために、抽象クラス AbstractHttpAdapter を継承し、実装する必要があるメソッドを抽象として定義します。
![164622168380304ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。 ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。](https://img.php.cn/upload/image/572/554/210/164622168380304%E3%83%8E%E3%83%BC%E3%83%89%20%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%20Nest.js%20%E3%81%8C%20Express%20%E3%82%92%E7%96%8E%E7%B5%90%E5%90%88%E3%81%A7%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E7%B5%B1%E5%90%88%E3%81%99%E3%82%8B%E3%81%8B%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E8%A9%B1%E3%81%97%E3%81%BE%E3%81%97%E3%82%87%E3%81%86%E3%80%82)
Express または fastify などの他のプラットフォームは、アダプター クラスを継承し、抽象メソッドを実装している限り、Nest.js に接続できます。
たとえば、ExpressAdapter:
![164622168898995ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。 ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。](https://img.php.cn/upload/image/973/987/922/164622168898995%E3%83%8E%E3%83%BC%E3%83%89%20%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%20Nest.js%20%E3%81%8C%20Express%20%E3%82%92%E7%96%8E%E7%B5%90%E5%90%88%E3%81%A7%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E7%B5%B1%E5%90%88%E3%81%99%E3%82%8B%E3%81%8B%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E8%A9%B1%E3%81%97%E3%81%BE%E3%81%97%E3%82%87%E3%81%86%E3%80%82)
または FastifyAdapter:
![164622169245157ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。 ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。](https://img.php.cn/upload/image/911/673/876/164622169245157%E3%83%8E%E3%83%BC%E3%83%89%20%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%20Nest.js%20%E3%81%8C%20Express%20%E3%82%92%E7%96%8E%E7%B5%90%E5%90%88%E3%81%A7%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E7%B5%B1%E5%90%88%E3%81%99%E3%82%8B%E3%81%8B%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E8%A9%B1%E3%81%97%E3%81%BE%E3%81%97%E3%82%87%E3%81%86%E3%80%82)
これらのロジックは、platform-express および platform-fastify に配置されます。パッケージ内:
![1646221696867360.png ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。](https://img.php.cn/upload/image/682/723/812/1646221696867360.png)
Nest.js コードの最初の行は、create を呼び出すことです:
![164622170178539ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。 ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。](https://img.php.cn/upload/image/356/191/377/164622170178539%E3%83%8E%E3%83%BC%E3%83%89%20%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%20Nest.js%20%E3%81%8C%20Express%20%E3%82%92%E7%96%8E%E7%B5%90%E5%90%88%E3%81%A7%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E7%B5%B1%E5%90%88%E3%81%99%E3%82%8B%E3%81%8B%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E8%A9%B1%E3%81%97%E3%81%BE%E3%81%97%E3%82%87%E3%81%86%E3%80%82)
create willタイプ httpAdapter を選択してサービスを作成します:
![164622170569717ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。 1ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。](https://img.php.cn/upload/image/365/152/131/164622170569717%E3%83%8E%E3%83%BC%E3%83%89%20%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%20Nest.js%20%E3%81%8C%20Express%20%E3%82%92%E7%96%8E%E7%B5%90%E5%90%88%E3%81%A7%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E7%B5%B1%E5%90%88%E3%81%99%E3%82%8B%E3%81%8B%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E8%A9%B1%E3%81%97%E3%81%BE%E3%81%97%E3%82%87%E3%81%86%E3%80%82)
デフォルトは Express です:
![164622170912930ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。 1ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。](https://img.php.cn/upload/image/729/438/193/164622170912930%E3%83%8E%E3%83%BC%E3%83%89%20%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%20Nest.js%20%E3%81%8C%20Express%20%E3%82%92%E7%96%8E%E7%B5%90%E5%90%88%E3%81%A7%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E7%B5%B1%E5%90%88%E3%81%99%E3%82%8B%E3%81%8B%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E8%A9%B1%E3%81%97%E3%81%BE%E3%81%97%E3%82%87%E3%81%86%E3%80%82)
このようにして、リクエストは応答メソッドは後で呼び出されます。結局のところ、すべて高速です。
たとえば、コントローラーでは @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';
}
}
ログイン後にコピー
インターフェイスの外でいくつかのプラットフォーム固有のメソッドを呼び出したい場合は、Nest.js もサポートしており、@Req を使用して注入します。
import { Controller, Get, Req } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Get()
findAll(@@Req() request: Request): string {
return 'This action returns all cats';
}
}
ログイン後にコピー
この方法で注入されるのは次のとおりです。特定のプラットフォーム たとえば、Express のネイティブ リクエスト オブジェクトは、そのすべてのメソッドを直接使用できます。
さらに、Express プラットフォームの特定の API を実際に使用したい場合は、NestFactory.create 時に対応する型パラメータを指定すると、対応する型のプロンプトとチェックを実行できるようになります。
![164622171478107ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。 1ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。](https://img.php.cn/upload/image/133/673/264/164622171478107%E3%83%8E%E3%83%BC%E3%83%89%20%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%20Nest.js%20%E3%81%8C%20Express%20%E3%82%92%E7%96%8E%E7%B5%90%E5%90%88%E3%81%A7%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E7%B5%B1%E5%90%88%E3%81%99%E3%82%8B%E3%81%8B%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E8%A9%B1%E3%81%97%E3%81%BE%E3%81%97%E3%82%87%E3%81%86%E3%80%82)
ただし、これは特定のプラットフォームと結合されるため、プラットフォームを切り替えないことが確実な場合を除き、お勧めできません。
http プラットフォームはこれを行い、同様に websocket プラットフォームも同じことを行います:
は、アダプターを介してソケットIO および WebSocket に柔軟に接続できる統合インターフェイスを定義します。スイッチ:
![164622171843008ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。 1ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。](https://img.php.cn/upload/image/933/118/265/164622171843008%E3%83%8E%E3%83%BC%E3%83%89%20%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%20Nest.js%20%E3%81%8C%20Express%20%E3%82%92%E7%96%8E%E7%B5%90%E5%90%88%E3%81%A7%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E7%B5%B1%E5%90%88%E3%81%99%E3%82%8B%E3%81%8B%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E8%A9%B1%E3%81%97%E3%81%BE%E3%81%97%E3%82%87%E3%81%86%E3%80%82)
#http および Websocket プラットフォームの Nest.js 処理の図:
![1646221722697150.png 1ノード フレームワーク Nest.js が Express を疎結合でどのように統合するかについて話しましょう。](https://img.php.cn/upload/image/493/108/211/1646221722697150.png)
概要
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 サイトの他の関連記事を参照してください。