Это мой код здесь ..!
const express = require('express');
const app = express();
let myFunc = function (req, res, next) {
console.info('This is middleware');
next();
}
app.use(myFunc);
app.get('/', (req, res) => {
console.info('This is get /');
res.send('Hello World!');
});
app.listen(3000, () => {
console.info('Server is running at port 3000....');
});
В этом я создал промежуточное ПО под названием myFunc, но результат не такой, как я думал.
Server is running at port 3000....
This is middleware
This is get /
This is middleware
Я думаю, что другой запрос - для значка
другой - для значка!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


app.use запускается каждый раз, когда вы запускаете приложение. в этом случае вы запускаете дважды. app.get и app.listen
Хммммм, вы в этом уверены? Ни объявление маршрута, ни запуск сервера не должны запускать промежуточное ПО или как-то повторно запускать app.use.
Нет, он не работает. Я попытался удалить app.get, но затем он выполнил дважды!
Нет, я запустил сервер и перезагрузил страницу. Я получил ошибку на веб-странице, что вполне приемлемо, но затем она выполняется дважды!
@AdityaPradhan Этот ответ не имеет смысла. Я уверен, что браузер отправляет еще один запрос с запросом значка. Вы можете легко проверить это, сделав запрос с помощью curl curl http://localhost:3000. Промежуточное ПО будет запускаться только один раз.
это не мнение, это из документации: промежуточное ПО, смонтированное без пути, будет выполняться для каждого запроса к приложению
Да для каждого запрос Ни app.get, ни app.listen не запрашивают.
@YuryTarabanko Да, я думаю, что вы правы, когда я попросил использовать Postman, он сработал, а промежуточное ПО было выполнено только один раз
ни app.get, ни app.listen не вызывают его функцию. Вместо этого каждый запрос, поступающий из браузера, вызывает его функцию.
As @DavidWhite said app.use is running every time you trigger app. in this case you trigger twice. app.get and app.listen You should use the middleware this way
const express = require('express');
const app = express();
let myFunc = function (req, res, next) {
console.info('This is middleware');
next();
}
app.get('/', myFunc,(req, res) => {
console.info('This is get /');
res.send('Hello World!');
});
app.listen(3000, () => {
console.info('Server is running at port 3000....');
});
Когда вы используете app.use(myFunc);, вы применяете промежуточное ПО ко всем приложениям.
И вы используете app.get и app.listen, поэтому промежуточное ПО запускается дважды. Попробуйте использовать middlewere в запросе get
Я пытался удалить app.get, но он все равно запускается дважды!
Да, это нормально, потому что вы используете функцию промежуточного программного обеспечения без пути монтирования. Этот код выполняется для каждого запроса к маршрутизатору. Не понимаю, почему он вызывается дважды, пожалуйста, добавьте console.info (req.url) в промежуточное ПО, как упомянул @Yuri.
ни app.get, ни app.listen не вызывают его функцию. Вместо этого каждый запрос, поступающий из браузера, вызывает его функцию.
Ваши статические файлы также имеют тот же URL-адрес, что и тот, который вы пытаетесь использовать. Так что, скорее всего, у вас будет что-то вроде этого: localhost: 3000 /: переменная
Здесь этот URL будет соответствовать многим материалам
Это происходит потому, что браузер запрашивает два файла. Первый будет для /, а второй, скорее всего, для favicon.ico. Если вы хотите увидеть Зачем, который вызывается, измените свою единственную функцию, чтобы она выглядела так:
let myFunc = function (req, res, next) {
console.info('This is middleware', req.originalUrl);
next();
}
Затем он будет выводить URL-адрес, который запрашивался каждый раз, когда браузер обращается к серверу.
Ты совершенно прав. Это из-за файла favicon.ico. Браузер отправляет запрос дважды: 1 для «/» и 1 для «/favicon.ico» ... Большое спасибо.
Добавьте
console.info(req.url)в промежуточное ПО. Бьюсь об заклад, браузер запрашивает значок.