【发布时间】:2021-07-25 02:28:29
【问题描述】:
const express = require('express');
const app = express();
app.use('/', (req, res, next) => {
console.log('This always runs!');
next();
});
app.use('/add-product', (req, res, next) => {
console.log('In add product middleware!');
res.send('<h1>The "Add Product" Page</h1>');
});
app.use('/', (req, res, next) => {
console.log('In another middleware!');
res.send('<h1>Hello from Express!</h1>');
});
app.listen(3000);
NodeJS / Express: what is "app.use"? 我从这篇文章中读到,仍然对这个程序中的控制流如何进行感到困惑。如果我访问“localhost:3000/add-product”,记录的结果是“这总是运行!在添加产品中间件!这总是运行!在另一个中间件中!”(我省略了更改线) 这是否意味着在它进入第二个 app.use 之后,正如我所了解的,每次向服务器发送请求时都会调用每个 app.use(middleware)。所以这个过程重新启动,但是为什么这次下次( ) 会导致第三个 app.use 被调用?我认为 next 会进入下一个匹配路径..
【问题讨论】:
-
这真的取决于你打电话的路线有多具体。尝试使用路由
/add-product调用它,调用将转到第一个和第二个app.use路由编辑:路由也应该从最具体到最不具体进行排列。因为那是匹配的顺序。 -
我尝试用 route /add-product 调用它,结果记录到控制台就像我提到的那样,这意味着它进入第一个和第二个,然后是第一个和第三个,这对我。
-
@ansley77777723 当您调用 /add....时,第一个中间件运行并调用 next 为第二个。如您所见,第二个中间件正在结束 req res 循环。我们得到了回应。第一个中间件再次启动,但这次将转到第三个。因为我们已经收到了第二个的回复。您可以阅读有关子堆栈中间件的更多信息。
标签: express