Экспресс функции промежуточного программного обеспечения вызывается дважды, когда запрос сделан из браузера - PullRequest
0 голосов
/ 22 сентября 2019

Ниже приведен код моего nodejs

const express = require('express');

const app = express();

app.use('/', (req, res, next) => {
    console.log("In interceptor");
    next();
});

app.use('/users', (req, res, next) => {
    console.log('In /users middleware');
    res.send('<h1>From "/users" handler </h1>');
});

app.use('/', (req, res, next) => {
    console.log("Default handler");
    res.send('<h1>From default handler</h1>');
});

app.listen(3000);

Вывод на консоль, когда запрос сделан из браузера (как хром, так и край)

http://localhost:3000
******************
In interceptor
Default handler
In interceptor
Default handler
******************

http://localhost:3000/users
******************
In interceptor
In /users middleware
In interceptor
Default handler
******************

Но когда запрос сделан с использованием curl, Я не вижу нескольких вызовов

curl http://localhost:3000
******************
In interceptor
Default handler
******************

curl http://localhost:3000/users
******************
In interceptor
In /users middleware
******************

Может кто-нибудь объяснить, почему функции промежуточного программного обеспечения вызываются несколько раз, когда выполняется запрос из браузера?

Ответы [ 2 ]

1 голос
/ 22 сентября 2019

Обычные причины появления нескольких запросов при загрузке страницы из браузера - одна из двух:

  1. Браузер автоматически запрашивает файл favicon.ico.
  2. Браузерпытаясь загрузить какой-либо ресурс из файла HTML (файл сценария, изображение, файл CSS и т. д.)

Вы можете точно узнать, для чего предназначен каждый запрос, добавив:

console.log(req.url);

на ваше промежуточное ПО.

0 голосов
/ 22 сентября 2019

Обнаружено, что это происходит из-за запроса /favicon.ico, сделанного браузером.Добавление определенного обработчика (показано ниже) предотвратило повторный вызов обработчика по умолчанию

app.use('/favicon.ico', (req, res, next) => {
    console.log('favicon handler');
    res.sendStatus(200);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...