为什么即使指定的挂载路径不是它自己的,也会调用中间件?



我是节点和表达式的新手,尝试探索事物。我制作了两个中间件,它们都有指定的装载路径,即使请求不是MIDDLEWARE2,它也会被调用。

我写的代码:


// 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
第一种情况我哪里错了?

提前感谢您所能提供的任何帮助。

Express'app.use将应用于每个请求,其路径以您输入的路径开始。这意味着app.use('/demo', ...)将应用于以/demo开头的每一条路由,app.use('/', ...)将应用于每一条以/开头的路由,这显然是每一条路径。

如果你只想让它在精确的/路径上,也许app.all('/', ...)可以解决你的问题,因为它只适用于精确匹配,但仍然适用于所有HTTP方法。

相关内容

最新更新