#javascript #node.js #express #server #middleware
#javascript #node.js #экспресс #сервер #промежуточное программное обеспечение
Вопрос:
В следующем коде промежуточное logger()
программное обеспечение вызывается дважды, если я использую его в качестве первого аргумента app.use()
, но оно вообще не вызывается, если используется в качестве второго аргумента.
Может кто-нибудь, пожалуйста, объяснить, что происходит?
const express = require('express');
const app = express();
const path = require('path');
app.use(express.static(path.join(__dirname,'public')), logger);
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => console.log(`Server started on port ${PORT}`));
function logger(req, res, next) {
console.log("logger, then next");
next();
}
Комментарии:
1. Просто войдите
req.url
вlogger()
систему для каждого запроса, и все станет ясно.
Ответ №1:
регистратор промежуточного программного обеспечения() вызывается дважды, если я использую его в качестве первого аргумента app.use()
Это происходит потому, что браузер запрашивает два файла. Первое будет для /, а второе, вероятно, для favicon.ico. Если вы хотите понять, почему это вызывается, измените свою функцию one, чтобы она выглядела следующим образом:
function logger(req, res, next) {
console.log('This is middleware', req.originalUrl);
next();
}
Затем он будет выводить URL-адрес, который был запрошен при каждом обращении браузера к серверу.
оно вообще не вызывается, если используется в качестве второго аргумента
Поскольку запрос уже был обработан, когда express достигает промежуточного программного обеспечения регистратора, порядок промежуточного программного обеспечения очень важен в express.
Комментарии:
1. О да, на самом деле он запрашивает файл CSS, который я связал с html. Таким образом, на самом деле сервер получает два запроса, для каждого из которых он вызывает logger. Спасибо