在app.use中触发函数的顺序
我读过中间件函数按照它们被添加的顺序执行,所以如果我有以下内容:
app.use('/', function () { console.log('/'); next(); }); app.use('/users', function () { console.log('/users'); next(); }); app.use(function () { console.log('none'); next(); });
他们以什么顺序执行,为什么如果path是:
- /
- /用户
- /一些
对于所有的端点:
-
/
-
/users
-
/some
只有第一个函数将被调用原始代码:
app.use('/', function (req, res, next) { console.log('/'); }); app.use('/users', function (req, res, next) { console.log('/users'); }); app.use(function (req, res, next) { console.log('none'); });
那是因为你没有使用next()
。 但是,如果你有:
app.use('/', function (req, res, next) { console.log('/'); next(); }); app.use('/users', function (req, res, next) { console.log('/users'); next(); }); app.use(function (req, res, next) { console.log('none'); next(); });
然后:
- 对于
/
– function为/
然后none
- 对于
/users
– function为/
,users
和none
- 对于
/some
– 函数为/
和none
和404处理程序
那是因为:
-
/
函数匹配所有的路由 -
/users
function匹配/users
但不/
或/some
- 没有path意味着
/
默认,所以它匹配的一切
有关app.use
path匹配的详细信息,请参阅: