Каков правильный способ "закончить" запрос из промежуточного ПО 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()
, я предполагаю, что это означает, что я могу потенциально получать запросы к моему промежуточному программному обеспечению, которое, возможно, уже было завершено другим промежуточным программным обеспечением выше в цепочке; как я могу защитить себя от этого?
Ответы
Ответ 1
-
res.redirect()
действительно вызывает res.end()
сам;
- Вы должны называть
next()
, если ваше промежуточное ПО не является конечной точкой; в случае генерации перенаправления это конечная точка, а next()
не следует вызывать, но если req.host === host
, вам нужно позвонить next()
, чтобы переместить запрос вверх по цепочке на другое промежуточное ПО/маршруты;
- Запрос не заканчивается, ответ есть. И когда это произойдет, это закончит цепочку промежуточного программного обеспечения, поэтому вам не придется беспокоиться об этом.