Node.js Express路由多参数与多回调函数的技术疑问
Express路由多回调与next参数的常见疑问解答
1. 多回调函数的执行顺序
没错,app.get('/user/:id/edit', a, b, function(req, res))里的回调是严格按从左到右的顺序执行的,但有个核心要点:前面的回调必须显式调用next(),才能触发下一个回调执行。
举个实际例子:
function a(req, res, next) { console.log('先执行回调a'); next(); // 必须调用这个,才会轮到b } function b(req, res, next) { console.log('接着执行回调b'); next(); // 调用后才会进入最后的响应处理函数 } app.get('/user/:id/edit', a, b, function(req, res) { res.send('用户编辑页'); });
要是a里没写next(),那b和最后的处理函数都不会跑,请求会一直挂着直到超时报错。
2. next参数的传递逻辑
Express会一直给路由回调传next函数,不管你有没有声明这个参数。
- 如果你声明了
next(比如function(req, res, next)),就能调用它把请求传给下一个中间件或回调; - 要是没声明这个参数,就相当于放弃了推进流程的能力,后续的回调/中间件自然也不会被触发——因为没人调用
next()来接力。
提醒一句:如果声明了next但不调用,请求会被卡住,最后触发超时错误,所以得根据业务需求决定要不要调用next。
内容的提问来源于stack exchange,提问作者notaorb
相关产品推荐
相关产品推荐

