ホームページ >ウェブフロントエンド >jsチュートリアル >Express4.x ミドルウェア機能の紹介 (コード例)

Express4.x ミドルウェア機能の紹介 (コード例)

不言
不言転載
2019-03-16 10:57:242280ブラウズ

この記事では、Express4.x ミドルウェアの機能 (コード例) を紹介します。一定の参考値があります。必要な友人は参照してください。お役に立てば幸いです。役立ちます。

Express アプリケーションは基本的に一連のミドルウェア関数呼び出しであり、ミドルウェアはパイプラインで実行されます。水を運ぶ本物のパイプを想像してみてください。水は一方の端からポンプで汲み上げられ、目的地に到達する前にさまざまなゲージやバルブを通過します。このアナロジーの重要な部分は順序の問題であり、圧力計をバルブの前に置く場合と後ろに置く場合では、効果が異なります。同様に、水の中に何かを注入するバルブがある場合、バルブの「下流」すべてにこの新しく追加された成分が含まれることになります。 Express プログラムでは、app.use を呼び出すことによってミドルウェアがパイプラインに挿入されます。

Express 4.0 より前は、ルーターを明示的に接続する必要があったため、このパイプラインは少し複雑でした。ルーターに接続する場所によっては、ルートの順序が狂う可能性があるため、ミドルウェアとルート ハンドラーを混在させると、パイプラインの順序がさらにわかりにくくなります。 Express 4.0 では、ミドルウェアとルート ハンドラーが接続された順序で呼び出されるため、順序が明確になります。

ルート プロセッサ (app.get、app.post など、まとめて app.VERB と呼ばれることが多い) は、特定の HTTP 動詞 (GET、POST など) のみを処理するミドルウェアと考えることができます。同様に、ミドルウェアは、すべての HTTP 動詞を処理できるルート プロセッサと考えることもできます (基本的に、あらゆる HTTP 動詞を処理できる app.all と同等です。PURGE などの特別な動詞については微妙な違いがありますが、通常の動詞についてはこれまでのところ述語に関しては、効果は同じです)。

ルート プロセッサの最初のパラメータはパスである必要があります。ルートをすべてのパスに一致させたい場合は、/* を使用するだけです。ミドルウェアは最初のパラメータとしてパスを取ることもできますが、これはオプションです (このパラメータを省略すると、/* が指定されたものとしてすべてのパスに一致します)

ルート プロセッサとミドルウェアにはコールバック関数があります。ファイルのパラメータ。この関数には 2、3、または 4 つのパラメータがあります (技術的には 0 または 1 つのパラメータを持つこともできますが、これらの形式は意味がありません)。パラメータが 2 つまたは 3 つある場合、最初の 2 つのパラメータはリクエスト オブジェクトとレスポンス オブジェクトで、3 番目のパラメータは次の関数です。パラメータが 4 つある場合、エラー処理ミドルウェアとなり、最初のパラメータがエラー オブジェクトとなり、リクエスト、レスポンス、次のオブジェクトが続きます。 next() が呼び出されない場合、パイプラインは終了し、プロセッサーやミドルウェアによるそれ以上の処理は行われません。

next() を呼び出さない場合は、クライアントに応答 (res.send、res.json、res.render など) を送信する必要があります。これを行わないと、クライアントはハングされ、最終的にタイムアウトが発生します。 next() が呼び出された場合、通常、クライアントに応答を送信することは適切ではありません。これを送信すると、パイプライン内の後続のミドルウェアまたはルート ハンドラーは引き続き実行されますが、送信された応答は無視されます。

var express = require('express')
var app = express()

var requestTime = function (req, res, next) {
  req.requestTime = Date.now()
  console.log(req.requestTime );
  next()
}
var requestUser = function (req, res, next) {
  console.log('welcome');
  next()
}

app.use(requestTime)
app.get('/', function (req, res) {
  console.log('//welcome');
  var responseText = 'Hello World!<br>'
  responseText += '<small>Requested at: ' + req.requestTime + '</small>'
  res.send(responseText)
})
app.use(requestUser)
app.listen(3000)

アクセス 127.0.0.1:3000 出力時間と //welcome は requestUser ミドルウェア コード 1552630945571//welcome

を実行しません

以上がExpress4.x ミドルウェア機能の紹介 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。