Express.jsでカスタムミドルウェアを作成する方法
序章
ミドルウェアは、Expressサーバーに対してライフサイクル方式を実行し、 request
と response
サイクル。 Express.jsは組み込みのミドルウェアを提供し、ユーザーが特定の操作を実行できないようにしたり、アプリケーションへの着信要求のパスをログに記録したりするなど、正確な機能のためのカスタムバージョンを作成できます。
この記事では、Express.jsでカスタムミドルウェアを作成する方法について学習します。
前提条件
この記事をフォローするには、次のものが必要です。
- Node.jsの一般的な理解が推奨されますが、必須ではありません。 Node.jsの詳細については、Node.jsシリーズのコーディング方法をご覧ください。
- の一般的な理解
request
とresponse
サイクル。 Expressでreqオブジェクトを使用する方法とExpressでresオブジェクトを使用する方法に関するチュートリアルを確認してください。 - Node.jsはローカルにインストールされます。これは、Node.jsのインストール方法とローカル開発環境の作成に従って実行できます。
Expressミドルウェアの分析
Express.jsのすべてのミドルウェア関数は、次の3つの引数を受け入れます。 request
, response
、 と next
ライフサイクルメソッド。 あなたの中で index.js
ファイル、引数として3つのライフサイクルメソッドを使用して関数を定義します。
function myCustomMiddleware(req, res, next) {
// ...
}
最初の議論、 req
、はの省略形です request
クライアント側からデータにアクセスし、HTTPリクエストを容易にするための組み込みプロパティを持つオブジェクト。 The res
引数は response
HTTPリクエストを介してクライアント側にデータを送信するための組み込みメソッドを備えたオブジェクト。 議論、 next
は、アプリケーション用に構成した次のミドルウェアに進むようにExpress.jsに指示する関数です。
ミドルウェアには、 req
と res
オブジェクト、任意のコードを実行し、終了します request
と response
サイクルし、次の機能に進みます。
ミドルウェアの順序に注意してください。 next()
先行する各ミドルウェアには機能が必要です。
ミドルウェアを構築する3つの引数を確認したので、カスタムミドルウェアを組み立てる方法を見てみましょう。
を使用して req
物体
現在ログインしているユーザーを識別するために、認証手順を通じてユーザーをフェッチできるカスタムミドルウェアを構築できます。 あなたの中で setCurrentUser.js
ファイルで、3つのライフサイクルメソッドを引数として受け入れる関数を定義します。
// 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()
カスタムミドルウェア:
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
物体:
module.exports = function addNewHeader(req, res, next) {
res.setHeader("X-New-Policy", "Success");
next();
};
ここでは、 .setHeader()
メソッドは新しいヘッダーを適用します、 Success
、各関数呼び出しで。 The next()
メソッドは、実行が完了すると、Express.jsに次のミドルウェアに進むように指示します。
終了 Request
と Response
サイクル
Express.jsを使用すると、 request
と response
カスタムミドルウェアを循環させます。 カスタムミドルウェアの一般的な使用例は、ユーザーのデータセットを検証することです。 req
物体。
あなたの中で isLoggedIn.js
ファイル、関数を定義し、条件を設定して、ユーザーのデータがに存在するかどうかを確認します req
物体:
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
単一のルートを介してユーザーを認証する要求:
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サイトの公式ドキュメントにアクセスしてください。