#javascript #node.js #express #response-time
Вопрос:
У меня есть это промежуточное программное обеспечение, которое используется:
app.use(response_time((req, res, time) => {
req.app.locals.latency = time;
console.log(req.app.locals.latency);
}));
app.use(logger.logRequest);
logger.LogRequest-это пользовательский регистратор, который делает это (он действительно включает цветовые коды ansi, но они были удалены для удобства чтения).:
console.log(`[${getDate()}] new ${req.method} request for ${req.url} from ${req.ip.replace("::ffff:", "")} took ${Math.round(req.app.locals.latency)}ms`);
Проблема в том, что первый запрос всегда показывает задержку как неопределенную, а промежуточное программное обеспечение response_time выполняется после регистратора, и кажется, что оно выполняется асинхронно.
Вот пример вывода, который я бы получил:
[2021:7:22:19:51:2] new GET request for / from ::1 took NaNms
18.020899999999997
[2021:7:22:19:51:2] new GET request for /css/master.css from ::1 took 18ms
[2021:7:22:19:51:2] new GET request for /js/dynamic-navbar.js from ::1 took 18ms
[2021:7:22:19:51:2] new GET request for /js/errors.js from ::1 took 18ms
9.8681
10.069899999999999
15.9856
[2021:7:22:19:51:3] new GET request for /favicon.ico from ::1 took 16ms
6.044099999999999
Как вы можете видеть, промежуточное программное обеспечение регистратора выполнялось 3 раза для 3 разных запросов, прежде чем промежуточное программное обеспечение response_time выполнялось для любого из 3, в результате чего номера задержек для регистратора кажутся одинаковыми.
Как я могу убедиться, что промежуточное программное обеспечение response_time запущено до всего остального?