Промежуточное программное обеспечение ExpressJS вызывается дважды

#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. Спасибо