В настоящее время я пытаюсь зарегистрировать полный конечный ответ на каждый запрос Express с помощью простой функции промежуточного программного обеспечения, например:
module.exports = (req, res, next) => {
const startTime = new Date();
const oldEnd = res.end;
res.end = (chunks, encoding) => {
const responseTime = new Date() - startTime;
res.set('Server-Timing', `total;dur=${responseTime}`);
console.log(req.path, `Response Time: ${responseTime}`);
res.end = oldEnd;
res.end(chunks, encoding);
};
next();
}
Этот код отлично работает с обычными конечными точками Express, но когда я пытаюсь обслуживатьстатический файл, подобный этому: app.use('/static/path', express.static('path'))
Я получаю следующую ошибку:
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
Это происходит из-за res.set
для синхронизации сервера, но это означает, что express.static
использует .end()
дважды?Когда я console.log
в своей функции промежуточного программного обеспечения, она вызывается только один раз.
Я использую NodeJS 10 и Express 4.16.4
Кто-нибудь знает, как решить эту проблему?