Почему промежуточное ПО вызывается, даже если указанный путь монтирования не является его собственным? - PullRequest
0 голосов
/ 01 марта 2020

Я новичок в узле и express, пытаюсь что-то исследовать. Я сделал два промежуточных программного обеспечения, оба с указанным путем монтирования, MIDDLEWARE 2 вызывается, даже если запрос не для него.

Код, написанный мной:


// middleware 1
app.use('/demo',function(req, res, next){
    console.log("MIDDLEWARE 1 CALLED");
    next();
});

// middleware 2
app.use('/', function(req, res, next){
    console.log("MIDDLEWARE 2 CALLED");
    next();
});

app.get('/demo',function(req, res){
    console.log("Hello, How are you?");
});

А теперь в в браузере я набираю: localhost:8000/demo
В консоли я получаю это:

MIDDLEWARE 1 CALLED
MIDDLEWARE 2 CALLED
Hello, How are you?

У меня вопрос, когда я указываю путь в запросе как /demo, почему второе промежуточное ПО вызывается?
Однако, когда я набираю это: localhost:8000, он работает как положено. Вызывается только промежуточное программное обеспечение 2.
Где я ошибаюсь в первом случае?

Заранее спасибо за любые помощь, которую вы можете предоставить.

1 Ответ

2 голосов
/ 01 марта 2020

Express 'app.use будет применяться к каждому запросу, путь которого начинается с вашего введенного пути. Значение app.use('/demo', ...) будет применяться к каждому маршруту, начинающемуся с / demo, а app.use('/', ...) будет применяться к каждому маршруту, начинающемуся с /, что, очевидно, относится к каждому маршруту.

Если вы хотите, чтобы он был только на точный / путь, может быть, app.all('/', ...) может решить вашу проблему, поскольку это относится только к точному совпадению, но все еще для всех методов HTTP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...