Express.js でのルーティングの説明


Express は複雑さを軽減し、アプリケーションの開発と保守を組み込みの Node.js ツールよりもはるかに簡単にします.ルーティングは、Express フレームワークの 3 つの大きな概念の 1 つです. Express.js の詳細については、Introduction to Express.js を参照してください.

この記事は、Express.js に関する大規模なシリーズの一部です.ここですべての記事を見つけることができます - Express Framework .

Express でのルーティング

Routing refers to how an application responds to a client request to a particular endpoint, which is a URI (or a path) and a specific HTTP request method (GET, POST, etc.). Each route can have one or more handler functions, which are executed when the route is matched.

A Route definition takes the following structure: app.METHOD(PATH, HANDLER)

  • app is an instance of express.
  • METHOD is an HTTP request method, in lowercase.
  • PATH is a path on the server.
  • HANDLER is the function executed when the route is matched.

Let's look at an example of a route /home that is defined for a GET request.

const express = require('express');
const app = express();

// GET method route
app.get('/home', (req, res) => {
  res.send('OK');
});

In the above example:

  • app is an instance of Express
  • app.get is the HTTP request method
  • /home is the route
  • (req, res) => {} is the handler function, which runs in response to a matching request.

ルート方法

A route method is derived from one of the HTTP methods, and is attached to an instance of the express class. There is a method for every HTTP verb, most commonly used below. For a full list see MDN .
  • GET .get()
  • ポスト .post()
  • プット .put()
  • 削除 .delete()
  • パッチ .patch()

  • ルート パスのマッチングには多くの可能性がありますが、ルートの選択には制限もあります.完全なリストについては、path-to-regexp のドキュメントを参照してください.

    ルートの例をいくつか示します.

    このルート パスは、 app.all() に対するリクエストと一致します.

    app.all('/secret', (req, res, next) => {
      console.log('Accessing the secret section ...');
      next(); // pass control to the next handler
    });
    


    このルート パスは、 / に対するリクエストと一致します.

    app.get('/', (req, res) => {
      res.send('root');
    });
    


    このルート パスは、 /home に対するリクエストと一致します.

    app.get('/home', (req, res) => {
      res.send('home');
    });
    


    このルート パスは、 /info.text および /acd に対して行われた要求と一致します.

    app.get('/info.text', (req, res) => {
      res.send('info.text');
    });
    


    このルート パスは、 /abcdabcdabbcd などに対して行われたリクエストと一致します.

    app.get('/ab?cd', (req, res) => {
      res.send('ab?cd');
    });
    


    このルート パスは、 abbbcdabcdabxcd などに対して行われたリクエストと一致します.

    app.get('/ab+cd', (req, res) => {
      res.send('ab+cd');
    });
    


    正規表現はルート パスとして使用できるため、このルート パスは abANYRANDOMSTRINGcd を含むリクエストとどこでも一致します.

    app.get('/ab*cd', (req, res) => {
      res.send('ab*cd');
    });
    


    Express 4.x では a の扱いが異なります. を参照してください.この動作は、Express 5.x 以降で修正されています.

    ルートメソッド .all() 特別なルーティング方法があります*。すべての HTTP リクエストのパスでミドルウェア関数をロードするために使用されます。 app.get('/a/', (req, res) => { res.send('/a/'); });

    ルート パス リクエスト メソッドを含むルート パスは、リクエストを作成できるエンドポイントを定義します。それらは、文字列、文字列パターン、または正規表現にすることができます。クエリ文字列はルート パスの一部ではありません。 文字 ?、+、*、および () は、対応する正規表現のサブセットです。ハイフン (-) とドット (.) は、文字列ベースのパスによって文字どおりに解釈されます。

    Express uses path-to-regexp here および .将来的に専用のエクスプレス ルーティング ブログ記事が作成される予定です.

    単一の HTTP トランザクションは、要求と応答のサイクルで大まかに説明できます.
  • クライアントがサーバーに要求を送信します.
  • サーバーはリクエストを受信し、データ (リクエスト ヘッダー、URL パス、HTTP メソッド、クエリ パラメータ、Cookie、データまたはペイロードなど) を読み取ります.
  • サーバーがクライアントに応答を返します.これには、ステータス コード、ヘッダー、コンテンツ エンコーディング、返されるデータが含まれます.
  • 応答が返されると、HTTP トランザクションが完了します.
  • req.params および /users/:userId/books/:bookId オブジェクトを拡張することは、Express が機能を拡張する方法の大きな部分を占めていますが、要求と応答の処理方法を引き続き制御できます.

    1 つのコールバック関数で、次のようなルートを処理できます.

    app.get(`/users/:userId/books/:bookId`, (req, res) => {
      console.log(req.params);
    });
    


    関数の配列の例の下:

    app.get('/home', (req, res) => {
      res.send('home');
    });
    


    これらの Route parameters を見てください.

    参考文献(そして大きな感謝):

    A Route can accept dynamic values within a path, so called route parameters. Route parameters are named URL segments that are used to capture the values specified at their position in the URL. The captured values are populated in the http://localhost:3000/users/34/books/8989 object, with the name of the route parameter as their key.

    For example a route path req.params would require a request URL to be something like { "userId": "34", "bookId": "8989" } , and the captured route parameters would be populated in next() like this req .

    To define a route parameter just specify the route parameters in the path.

    const cb0 = function(req, res, next) {
      console.log('CB0');
      next();
    };
    
    const cb1 = function(req, res, next) {
      console.log('CB1');
      next();
    };
    
    app.get('/c', [cb0, cb1]);
    
    Route handlers

    Route handlers are callback functions or arrays of functions, which basically handle requests. Multiple callback functions can be provided to handle a request and behave like a middleware. The only exception is that these callbacks can call res to bypass the next and remaining route callbacks. Route handlers can be in the form of a function, an array of functions, or a combination of both.

    The request and response are often shortened to req and res , and stand for the request which was received by the server, and the response which will eventually be send back.