Expressミドルウェアとは何ですか? Nodeでどうやって使うの?

青灯夜游
リリース: 2022-02-10 19:01:35
転載
1921 人が閲覧しました

Express ミドルウェアとは何ですか?Nodeでそれを使用するにはどうすればよいですか? Expressミドルウェアの簡単な使い方については以下の記事で紹介していますので、ぜひ参考にしてください。

Expressミドルウェアとは何ですか? Nodeでどうやって使うの?

#1. Express ミドルウェアとは

ミドルウェアとは、具体的にはビジネス プロセスの中間処理リンクを指します。

2. Express ミドルウェアの呼び出しプロセス

Express サーバーにリクエストが到達すると、リクエストを準備するために複数のミドルウェアを連続的に呼び出すことができます。

3. ミドルウェア形式

本質的には関数処理関数です

注: ミドルウェア関数の仮パラメータリスト、次のパラメータを含める必要があります。ルーティング処理関数には req と res のみが含まれており、

// next参数必须在最后一个传入 const mw = (req, res, next) => { ... // next()必须在最后调用 next() }
ログイン後にコピー

4 next() 関数の役割

next 関数が複数ミドルウェアの連続呼び出しを実現する鍵となりますこれは、フロー関係を次のミドルウェアまたはルートに転送することを意味します。

5. グローバルに効果的なミドルウェア

クライアントによって開始されたリクエストは、サーバーに到達した後に、グローバルに効果的なミドルウェアと呼ばれるミドルウェアをトリガーします。 server.use (ミドルウェア関数) を呼び出すことで、グローバルに有効なミドルウェアを定義できます。サンプルコードは次のとおりです:

const mw = (req, res, next) => { next() } const mw1 = (req, res, next) => { next() } // 全局生效的中间件,中间件调用顺序以传入顺序为准 server.use(mw,mw1)
ログイン後にコピー

6. ローカルに有効なミドルウェア

Partialミドルウェアは指定されたルーティング パスでのみ有効になります

const mw = (req, res, next) => { next() } const mw1 = (req, res, next) => { next() } // 局部生效的中间件 server.get('/',mw,(req,res)=>{ res.send('路径:/') }) // 定义多个局部生效的中间件 // 1、直接逗号分隔 server.get('/',mw,mw1,(req,res)=>{ res.send('路径:/') }) // 2、或者使用数组包含 server.get('/',[mw,mw1],(req,res)=>{ res.send('路径:/') })
ログイン後にコピー

7. ミドルウェアの役割

複数のミドルウェアは同じ要求と要求を共有します。この機能に基づいて、下流のミドルウェアまたはルーティングで使用できるように、上流のミドルウェアの req オブジェクトまたは res オブジェクトにカスタム属性またはメソッドを均一に追加できます。

const mw = (req, res, next) => { // 添加属性 req.startTime=new Date() next() }
ログイン後にコピー

8. Express ミドルウェアの 5 つの注意点

  • ルーティング前に必ずミドルウェアを登録してください

  • #複数のミドルウェアを連続して呼び出すことで、クライアントから送信されたリクエストを処理できます。
  • ミドルウェアの業務コードを実行した後は、必ず next() 関数を呼び出してください
  • コードロジックの混乱を避けるため、next() 関数を呼び出した後に追加のコードを記述しないでください。
  • 複数のミドルウェアを連続して呼び出す場合は、複数のミドルウェアを呼び出す必要があります。ミドルウェア間での req オブジェクトと res オブジェクトの共有
  • #9. Express ミドルウェアの分類

#アプリケーション レベルのミドルウェア
  • #ルーティング レベルのミドルウェア

  • ##エラー レベルのミドルウェア

  • ##Express 組み込みミドルウェア
  • ##サードパーティ ミドルウェア
  • 詳細な紹介:
  • アプリケーション レベルのミドルウェア
サードパーティ ミドルウェアapp.use()、app.get()、または app.post() を介してアプリ インスタンスにバインドされるものは、アプリケーション レベルのミドルウェアと呼ばれます。コード例は次のとおりです。ルーティング レベルのミドルウェア

express.Router() インスタンスにバインドされたミドルウェアは、ルーティング レベルのミドルウェアと呼ばれます。その使用方法はアプリケーションレベルのミドルウェアと何ら変わりません。ただし、アプリケーション レベルのミドルウェアはアプリ インスタンスにバインドされ、ルーティング レベルのミドルウェアはルーター インスタンスにバインドされます。コード例は次のとおりです:
    // 全局生效的中间件(应用级别的中间件) server.use(mw,mw1) // 局部生效的中间件(应用级别的中间件) server.get('/',mw,mw1,(req,res)=>{ res.send(`请求进入服务器的时间:${req.startTime}`) })
    ログイン後にコピー
  • エラー レベルのミドルウェア

    エラーレベルミドルウェアの役割: プロジェクト全体で発生する異常なエラーを捕捉し、プロジェクトの異常クラッシュを防ぐために特に使用されます。
  • 形式: エラーレベルミドルウェアの関数処理関数には4つの仮引数が必要で、仮引数の順序は前から(err、req、res、next)となります。

    #注: エラー レベルのミドルウェアはすべてのルートの後に登録する必要があります!

    const router = require('./router/router') // 路由级别的中间件 router.use((req,res,next)=>{ next() })
    ログイン後にコピー
  • Express 組み込みミドルウェア

    Since Express 4.16.0 バージョンの Express には、一般的に使用される 3 つのミドルウェアが組み込まれており、Express プロジェクトの開発効率とエクスペリエンスが大幅に向上します。

    express.static fast hosting static HTML ファイル、画像、CSS スタイルなどのリソース (互換性なし)

  • express.json はリクエスト本文データを JSON 形式で解析します (互換性あり、でのみ利用可能)バージョン 4.16.0)
  • #express.urlencoded は、URL エンコード形式でリクエスト本文データを解析します (互換性があり、バージョン 4.16.0 でのみ利用可能)

      // 人为制造错误 server.get('/err', (req, res) => { throw new Error('人为抛出错误!!!') res.send('err Page') }) // 定义错误级别的中间件 server.use((err, req, res, next) => { console.log('发生了错误:' + err.message); res.send('Error:'+err.message) next() })
      ログイン後にコピー

    • サードパーティ ミドルウェア
    • は Express に正式に組み込まれていませんが、サードパーティ ミドルウェアと呼ばれるサードパーティによって開発されています。プロジェクトでは、サードパーティのミドルウェアをオンデマンドでダウンロードして構成できるため、プロジェクトの開発効率が向上します。 例:

      express@4.16.0

      より前のバージョンでは、サードパーティのミドルウェア
    • body-parser
    • がリクエスト本文データの解析によく使用されていました。使用手順は次のとおりです。

    • 実行npm install body-parser
    • ミドルウェアのインストール

      requireを使用してミドルウェアをインポートします。

        server.use()を呼び出す
      • ミドルウェアを登録して使用する

      注: Express の組み込みのexpress.urlencoded ミドルウェアは、サードパーティのミドルウェアのボディパーサーに基づいてさらにカプセル化されています。

    • ノード関連の知識の詳細については、nodejs チュートリアルを参照してください。

      以上がExpressミドルウェアとは何ですか? Nodeでどうやって使うの?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:juejin.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!