问题描述
const express = require('express');
const app = express();
app.use('/',(req,res,next) => {
console.log('This always runs!');
next();
});
app.use('/add-product',next) => {
console.log('In add product middleware!');
res.send('<h1>The "Add Product" Page</h1>');
});
app.use('/',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)。所以这个过程重新启动,但为什么这次是 next( ) 会导致第三个 app.use 被调用?我以为 next 会进入下一个匹配路径..
解决方法
route
的顺序在 express
中很重要
基于first come first serve
的快速匹配路由,就像队列一样。
如果路由匹配,那么您作为回调传递的任何函数都会被调用。
在你的情况下:
路线 1:匹配每条路线
路线 2:匹配 /add-product
路线 3:匹配每条路线
所以检查的顺序是 1 -> 2 -> 3
所以如果我给 GET
打电话
(1) 和 (2) 将被称为
和以下日志
/add-product
虽然调用 This always runs!
In add product middleware!
将
导致 (1) 和 (3) 被调用。
/
This always runs!
In another middleware!
只是将控制权传递给下一个中间件