不调用next()的后果
我一直在使用Restify一段时间。 我碰到了一些缺lessnext()
代码,我想我不知道我是否完全理解在res.send()
之后应该调用next()
的原因。 我得到为什么会在中间件的情况下使用它,但是对于一个正常的路由,为什么它需要? 例如:
server.get('/a/:something/',function(req,res,next) { res.send('ok'); });
VS
server.get('/b/:something/',function(req,res,next) { res.send('ok'); return next(); });
如果return next();
被排除在代码之外,它似乎不会导致错误,并从我能看到的东西开始工作。
restify API指南有这样的说法:
您负责调用next()以运行链中的下一个处理程序。
他们所指的“链条”是每条路线的处理者链条。 一般来说,每个路由将由多个处理程序按特定顺序处理。 链中的最后一个处理程序并不需要调用next(),但是假设处理程序总是最后一个是不安全的。 未能调用链中的所有处理程序可能会在处理请求时导致严重或微妙的错误。
因此,作为良好的编程习惯,你的处理程序应该总是调用next()[用适当的参数]。
另一个问题(当前)是,如果所有的处理程序都没有next
调用,那么服务器事件after
就不会发出。 例如,如果使用auditLogger使用after
事件logging请求,则不会获取到达下一个未处理的处理程序的任何请求的日志。
我已经打开了一个公关来解决这个问题,以便after
事件发生任何方式,但next
调用是使用restify的应用程序的预期规范。