Node.js 中间件执行顺序为什么不对?
我在 Express 里写了几个中间件,但发现它们的执行顺序和我写的顺序不一致,明明是先 use 的 A,再 use 的 B,结果 B 先执行了?
我试过把中间件函数写成同步的,也检查过 next() 调用没问题,但还是乱序。是不是跟路由路径有关?比如有的中间件绑定了特定路径?
顺便贴一下我项目里用到的一段全局样式,虽然可能不相关,但怕是不是前端资源加载影响了请求顺序:
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto;
background-color: #f5f5f5;
}
.loading {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
use的顺序没错,但如果你给中间件绑定了特定的路径,那它的执行顺序会受请求路径影响。比如说你先用
app.use('/api', middlewareA)再用app.use(middlewareB),当请求 /api 路径时,middlewareB 会先执行,因为它是全局中间件。给你个效率更高的方案:把所有中间件都统一在文件顶部声明,并且按优先级排序,不要混着写带路径和不带路径的中间件。如果真需要路径区分,建议把逻辑都放在一个中间件里处理。
顺便说一句,你贴的那段样式代码跟这个问题完全没关系,不用管前端资源加载的问题。
这样就能保证执行顺序了。别忘了在开发环境多打印日志调试,省得搞混了又来找问题。