Подтвердить что ты не робот

Каков правильный способ "закончить" запрос из промежуточного ПО Express/Connect?

Предполагая, что у меня есть промежуточное ПО, например:

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();
    }
});

Какие правила мне нужно соблюдать здесь?

  • Должен ли я звонить res.end()? (или делает res.redirect() сделать это для меня?)
  • Должен ли я звонить next()? (или соединение обнаруживает, что запрос закончился и завершился чисто?)
  • Предполагая, что я должен называть next(), я предполагаю, что это означает, что я могу потенциально получать запросы к моему промежуточному программному обеспечению, которое, возможно, уже было завершено другим промежуточным программным обеспечением выше в цепочке; как я могу защитить себя от этого?
4b9b3361

Ответ 1

  • res.redirect() действительно вызывает res.end() сам;
  • Вы должны называть next(), если ваше промежуточное ПО не является конечной точкой; в случае генерации перенаправления это конечная точка, а next() не следует вызывать, но если req.host === host, вам нужно позвонить next(), чтобы переместить запрос вверх по цепочке на другое промежуточное ПО/маршруты;
  • Запрос не заканчивается, ответ есть. И когда это произойдет, это закончит цепочку промежуточного программного обеспечения, поэтому вам не придется беспокоиться об этом.