開発者ドキュメント

Express.jsでカスタムミドルウェアを作成する方法

序章

ミドルウェアは、Expressサーバーに対してライフサイクル方式を実行し、 requestresponse サイクル。 Express.jsは組み込みのミドルウェアを提供し、ユーザーが特定の操作を実行できないようにしたり、アプリケーションへの着信要求のパスをログに記録したりするなど、正確な機能のためのカスタムバージョンを作成できます。

この記事では、Express.jsでカスタムミドルウェアを作成する方法について学習します。

前提条件

この記事をフォローするには、次のものが必要です。

Expressミドルウェアの分析

Express.jsのすべてのミドルウェア関数は、次の3つの引数を受け入れます。 request, response、 と next ライフサイクルメソッド。 あなたの中で index.js ファイル、引数として3つのライフサイクルメソッドを使用して関数を定義します。

index.js
function myCustomMiddleware(req, res, next) {
  // ...
}

最初の議論、 req、はの省略形です request クライアント側からデータにアクセスし、HTTPリクエストを容易にするための組み込みプロパティを持つオブジェクト。 The res 引数は response HTTPリクエストを介してクライアント側にデータを送信するための組み込みメソッドを備えたオブジェクト。 議論、 nextは、アプリケーション用に構成した次のミドルウェアに進むようにExpress.jsに指示する関数です。

ミドルウェアには、 reqres オブジェクト、任意のコードを実行し、終了します requestresponse サイクルし、次の機能に進みます。

ミドルウェアの順序に注意してください。 next() 先行する各ミドルウェアには機能が必要です。

ミドルウェアを構築する3つの引数を確認したので、カスタムミドルウェアを組み立てる方法を見てみましょう。

を使用して req 物体

現在ログインしているユーザーを識別するために、認証手順を通じてユーザーをフェッチできるカスタムミドルウェアを構築できます。 あなたの中で setCurrentUser.js ファイルで、3つのライフサイクルメソッドを引数として受け入れる関数を定義します。

ミドルウェア/setCurrentUser.js
// Require in logic from your authentication controller
const getUserFromToken = require("../getUserFromToken");

module.exports = function setCurrentUser(req, res, next) {
  const token = req.header("authorization");

  // look up the user based on the token
  const user = getUserFromToken(token).then(user => {
    // append the user object the the request object
    req.user = user;

    // call next middleware in the stack
    next();
  });
};

あなたの中で setCurrentUser() 関数、 req オブジェクトは組み込みを適用します .header() ユーザーからアクセストークンを返すメソッド。 認証コントローラ方式を使用して、 getUserFromToken()、 君の req.header() ロジックは、トークンに基づいてユーザーを検索するための引数として渡されます。 また、使用することができます req カスタムプロパティを定義するオブジェクト、 .user ユーザーの情報を保存します。 ミドルウェアが完成したら、ファイルをエクスポートします。

組み込みのExpress.jsミドルウェアを適用することで、Expressサーバーでカスタムミドルウェアを有効にできます。 .use().

あなたの中で server.js ファイル、Expressのインスタンスをインスタンス化し、 setCurrentUser() カスタムミドルウェア:

server.js
const express = require('express');

const setCurrentUser = require('./middleware/setCurrentUser.js');

const app = express();

app.use(setCurrentUser);

// ...

The app.use() ミドルウェアは、カスタムミドルウェアを引数として受け入れ、Expressサーバーでロジックを承認します。

適用する res 物体

カスタムミドルウェアを作成して、の機能を処理することもできます response 新しいヘッダーの設計などのオブジェクト。

あなたの中で addNewHeader.js ファイル、関数を定義し、 .setHeader() 上のメソッド res 物体:

ミドルウェア/addNewHeader.js
module.exports = function addNewHeader(req, res, next) {
  res.setHeader("X-New-Policy", "Success");
  next();
};

ここでは、 .setHeader() メソッドは新しいヘッダーを適用します、 Success、各関数呼び出しで。 The next() メソッドは、実行が完了すると、Express.jsに次のミドルウェアに進むように指示します。

終了 RequestResponse サイクル

Express.jsを使用すると、 requestresponse カスタムミドルウェアを循環させます。 カスタムミドルウェアの一般的な使用例は、ユーザーのデータセットを検証することです。 req 物体。

あなたの中で isLoggedIn.js ファイル、関数を定義し、条件を設定して、ユーザーのデータがに存在するかどうかを確認します req 物体:

ミドルウェア/isLoggedIn.js
module.exports = function isLoggedIn(req, res, next) {
  if (req.user) {
    next();
  } else {
    // return unauthorized
    res.send(401, "Unauthorized");
  }
};

ユーザーのデータが req オブジェクトの場合、カスタムミドルウェアは次の機能に移動します。 特定のユーザーのデータがオブジェクトにない場合、 .send() 上のメソッド res オブジェクトはエラーステータスコードを転送します 401 そしてクライアント側へのメッセージ。

ミドルウェアを設定したら、ファイルをエクスポートしてExpress.jsサーバーに移動します。 あなたの中で server.js ファイル、要求し、カスタムミドルウェアを引数として挿入します GET 単一のルートを介してユーザーを認証する要求:

server.js
const express = require("express");

const setCurrentUser = require("./middleware/setCurrentUser.js");
const isLoggedIn = require("./middleware/isLoggedIn.js");

const app = express();

app.use(setCurrentUser);

app.get("/users", isLoggedIn, function(req, res) {
  // ...
});

ルート /users 内のロジックを処理します isLoggedIn カスタムミドルウェア。 Expressサーバーの順序に基づいて、ルートは setCurrentUser あなたの前に定義されているミドルウェア GET リクエスト。

結論

Express.jsは、組み込みメソッドの外部でミドルウェアをカスタマイズして、ユーザー認証とそのデータを解析する機能を提供します。

カスタムExpress.jsミドルウェアの作成に関する詳細については、Express.jsサイトの公式ドキュメントにアクセスしてください。

モバイルバージョンを終了