У меня есть две конечные точки в приложении js для узла:
app.get('search', myGetController);
app.post('add', myPostController);
Для простоты предположим, что обе службы имеют только следующий код:
exports.myGetController = function(req, res) {
res.status(404).json({ error: "not found" });
};
Я хочу иметь промежуточное программное обеспечение, которое выполняется после обработки контроллеров, но до их отправки в браузер, поэтому я могу добавить заголовок, основанный на теле ответа.
// process all responses to add ed25519
app.use(function(req, res, next) {
res.setHeader('CharCount', [How To get Body content]);
next();
});
У меня два вопроса:
Прежде всего, я бы хотел, чтобы все мои контроллеры проходили мимо этого промежуточного программного обеспечения после обработки.
Во-вторых, я хотел бы получить доступ к содержимому тела, чтобы я мог создать заголовок на основе его содержимого.
UPDATE
Я попробовал предложенный ответ, который кто-то написал, и он не работает, или я что-то упустил.
Вот что у меня есть (до настройки маршрутов):
app.use(function(req, res, next) {
const oldResJson = res.json;
res.json = function(body) {
res.setHeader('myToken', generateHeaderBasedOnBody(oldResJson));
oldResJson.call(res, body);
}
next();
});
Ответ, который передается моему методу, является пустой строкой, хотя ответ, отправленный службой, не является пустым. Я делаю это не в том месте или чего мне не хватает?