を理解する前next
に、ノードでの要求と応答のサイクルについて少し理解する必要がありますが、詳細はあまりわかりません。これは、特定のリソースに対してHTTPリクエストを行うことから始まり、ユーザーに応答を返すとき、つまりres.send('Hello World');のようなものに遭遇したときに終了します。
非常に簡単な例を見てみましょう。
app.get('/hello', function (req, res, next) {
res.send('USER')
})
ここではnext()は必要ありません。これは、resp.sendがサイクルを終了し、制御をルートミドルウェアに戻すためです。
次に、別の例を見てみましょう。
app.get('/hello', function (req, res, next) {
res.send("Hello World !!!!");
});
app.get('/hello', function (req, res, next) {
res.send("Hello Planet !!!!");
});
ここでは、同じパスに対して2つのミドルウェア関数があります。しかし、あなたはいつも最初のものからの応答を得るつもりです。これはミドルウェアスタックに最初にマウントされ、res.sendがサイクルを終了するためです。
しかし、常に「HelloWorld!!!!」が必要ない場合はどうでしょうか。応答します。条件によっては、「ハロープラネット!!!!」が必要になる場合があります。応答。上記のコードを変更して、何が起こるか見てみましょう。
app.get('/hello', function (req, res, next) {
if(some condition){
next();
return;
}
res.send("Hello World !!!!");
});
app.get('/hello', function (req, res, next) {
res.send("Hello Planet !!!!");
});
ここで何をしているのですかnext
。そして、はい、あなたは突風を持っているかもしれません。条件がtrueの場合、最初のミドルウェア関数をスキップして次のミドルウェア関数を呼び出すと、"Hello Planet !!!!"
応答が返されます。
したがって、次に、ミドルウェアスタック内の次の関数に制御を渡します。
最初のミドルウェア関数が応答を返さないが、ロジックの一部を実行してから、2番目のミドルウェア関数から応答を返す場合はどうなりますか。
以下のようなもの:-
app.get('/hello', function (req, res, next) {
// Your piece of logic
next();
});
app.get('/hello', function (req, res, next) {
res.send("Hello !!!!");
});
この場合、両方のミドルウェア関数を呼び出す必要があります。したがって、2番目のミドルウェア関数に到達する唯一の方法はnext()を呼び出すことです。
次への呼び出しを行わない場合はどうなりますか。2番目のミドルウェア関数が自動的に呼び出されることを期待しないでください。最初の関数を呼び出した後、リクエストはハングしたままになります。2番目の関数が呼び出されることはなく、応答が返されることもありません。