26

私がこのようなミドルウェアを持っていると仮定します。

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

app.use(function (req, res, next) {
    var host = "example.com";

    if (req.host !== host) {
        res.redirect(301, host + req.originalUrl);
        res.end();
    }
});

ここではどのようなルールを守る必要がありますか?

  1. 電話する必要がありres.end()ますか?(またはres.redirect()私のためにこれを行いますか?)
  2. 電話する必要がありnext()ますか?(または、connectは要求が終了したことを検出し、正常に終了しますか?)
  3. 電話をかける必要があると仮定すると、チェーンの上位にある他のミドルウェアによってすでに終了されている可能性のあるミドルウェアへの要求を受信する可能性があることnext()意味します。どうすればこれから身を守ることができますか?
4

1 に答える 1

34
  1. res.redirect()確かに自分自身を呼び出しres.end()ます。
  2. next()ミドルウェアがエンドポイントでない場合は、電話する必要があります。リダイレクトを生成する場合、それエンドポイントであり、next()呼び出されるべきではありませんが、呼び出される場合は、要求をチェーンの上位にある他のミドルウェア/ルートに移動するreq.host === hostために呼び出す必要があります。next()
  3. リクエストは終了しませんが、レスポンスは終了します。その場合、ミドルウェアチェーンが終了するため、心配する必要はありません。
于 2013-03-22T13:55:08.013 に答える