Node.js Express中调用next()时,后续中间件是否同步执行?
Express中next()的调用同步性解析
Express里调用next()默认是同步执行的,下一个中间件会在当前进程tick中直接运行,不会被放入微任务或回调队列延迟执行。
你可以通过一段简单的代码验证这个特性:
const express = require('express'); const app = express(); app.use((req, res, next) => { console.log('中间件1启动'); next(); console.log('中间件1收尾'); }); app.use((req, res, next) => { console.log('中间件2执行中'); next(); }); app.get('/', (req, res) => { res.send('Hello World'); }); app.listen(3000);
启动服务后访问根路径,控制台输出顺序会是:
中间件1启动
中间件2执行中
中间件1收尾
这个输出逻辑完全符合同步函数调用的特征:next()执行后,程序会立刻跳转到下一个匹配的中间件执行,当前中间件中next()之后的代码,要等下一个中间件(以及后续所有中间件/路由处理函数)执行完毕后,才会继续执行。
只有两种情况会让next()触发的中间件延迟执行:
- 手动把
next()放到异步操作里(比如setTimeout(next, 0)) - 使用
next('route')或next(error)这类特殊调用时,Express内部可能会有异步处理逻辑,但这属于特殊场景,并非默认行为。
内容的提问来源于stack exchange,提问作者adhi narayan
相关产品推荐
相关产品推荐

