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のすべてのミドルウェア関数は、request
、response
、およびnext
ライフサイクルメソッドに続く3つの引数を受け入れます。 index.js
ファイルで、次の3つのライフサイクルメソッドを引数として関数を定義します。
index.js
function myCustomMiddleware(req, res, next) { // ... }
最初の引数req
は、クライアント側からデータにアクセスしてHTTP要求を容易にするためのプロパティが組み込まれたrequest
オブジェクトの省略形です。 res
引数は、HTTPリクエストを介してクライアント側にデータを送信するための組み込みメソッドを備えたresponse
オブジェクトです。 引数next
は、アプリケーション用に構成した次のミドルウェアに進むようにExpress.jsに指示する関数です。
ミドルウェアには、req
およびres
オブジェクトを変更し、任意のコードを実行し、request
およびresponse
サイクルを終了して、次の手順に進むことができます。関数。
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ミドルウェア.use()
を適用することにより、Expressサーバーでカスタムミドルウェアを有効にできます。
server.js
ファイルで、Expressのインスタンスをインスタンス化し、setCurrentUser()
カスタムミドルウェアで要求します。
server.js
const express = require('express'); const setCurrentUser = require('./middleware/setCurrentUser.js'); const app = express(); app.use(setCurrentUser); // ...
app.use()
ミドルウェアは、カスタムミドルウェアを引数として受け入れ、Expressサーバーでロジックを承認します。
res
オブジェクトの適用
新しいヘッダーの設計など、response
オブジェクトの機能を処理するカスタムミドルウェアを作成することもできます。
addNewHeader.js
ファイルで関数を定義し、res
オブジェクトで.setHeader()
メソッドを利用します。
ミドルウェア/addNewHeader.js
module.exports = function addNewHeader(req, res, next) { res.setHeader("X-New-Policy", "Success"); next(); };
ここで、.setHeader()
メソッドは、各関数呼び出しに新しいヘッダーSuccess
を適用します。 next()
メソッドは、実行が完了すると、Express.jsに次のミドルウェアに進むように指示します。
Request
およびResponse
サイクルの終了
Express.jsを使用すると、カスタムミドルウェアのrequest
およびresponse
サイクルを終了することもできます。 カスタムミドルウェアの一般的な使用例は、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
オブジェクトに存在する場合、カスタムミドルウェアは次の機能に進みます。 特定のユーザーのデータがオブジェクトにない場合、res
オブジェクトの.send()
メソッドは、エラーステータスコード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サーバーの順序に基づいて、ルートはGET
リクエストの前に定義されているsetCurrentUser
ミドルウェアにもアクセスできます。
結論
Express.jsは、組み込みメソッドの外部でミドルウェアをカスタマイズして、ユーザー認証とそのデータを解析する機能を提供します。
カスタムExpress.jsミドルウェアの作成に関する詳細については、Express.jsサイトの公式ドキュメントにアクセスしてください。