1. ホーム
  2. node.js

[解決済み】NodeJS / Express: "app.use "とは何ですか?

2022-04-14 20:19:58

質問

NodeJSのドキュメント express モジュール の場合、サンプルコードでは app.use(...) .

とは何ですか? use という関数がありますが、これはどこで定義されているのですか?

どのように解決するのですか?

アプリオブジェクトは、Expressサーバーの作成時にインスタンス化されます。これには ミドルウェア スタック でカスタマイズできる app.configure() (これはバージョン4.xで非推奨となりました) .

ミドルウェアをセットアップするために app.use(<specific_middleware_layer_here>) は、追加したいミドルウェアレイヤーごとに(すべてのパスに汎用的に適用することも、サーバが処理する特定のパスのみをトリガーとすることも可能)、あなたの エクスプレス ミドルウェアスタック ミドルウェアレイヤーは、以下のように複数回呼び出すことで、1つずつ追加することができます。 use あるいは、1回の呼び出しで一度にすべて直列にすることも可能です。 参照 use ドキュメント をご覧ください。

Expressミドルウェアの概念を理解するための例として、アプリのオブジェクトをJSONとしてコンソールにロギングする際のアプリミドルウェアスタック(app.stack)の様子を示します。

stack: 
   [ { route: '', handle: [Function] },
     { route: '', handle: [Function: static] },
     { route: '', handle: [Function: bodyParser] },
     { route: '', handle: [Function: cookieParser] },
     { route: '', handle: [Function: session] },
     { route: '', handle: [Function: methodOverride] },
     { route: '', handle: [Function] },
     { route: '', handle: [Function] } ]

お察しの通り、私は app.use(express.bodyParser()) , app.use(express.cookieParser()) など、これらのエクスプレスミドルウェアの「レイヤー」をミドルウェアスタックに追加しています。ルートが空白であることに注意してください。つまり、これらのミドルウェア・レイヤーを追加したときに、どのルートでもトリガーされるように指定したのです。もしカスタムミドルウェアレイヤーを追加して、パス /user/:id に文字列として反映されます。 route フィールドを表示します。

各レイヤーは、基本的にミドルウェアを介したフローに、何かを特別に処理する機能を追加するものです。

例えば bodyParser , を使うと、express ミドルウェアを経由して入ってくるリクエストを確実に処理することができます。 . だから これで、入ってくるリクエストの本文を解析することが、 入ってくるリクエストを処理するときにミドルウェアがとる処理の一部になりました。 -- すべて、あなたが app.use(bodyParser) .