我一直在使用Restify一段时间了.我遇到了一些缺乏的代码,next()
我发现我不确定我是否完全理解为什么 next()
应该被调用res.send()
.我明白为什么会在中间件情况下使用它,但对于正常的路由,为什么需要它呢?例如:
server.get('/a/:something/',function(req,res,next) {
res.send('ok');
});
Run Code Online (Sandbox Code Playgroud)
VS
server.get('/b/:something/',function(req,res,next) {
res.send('ok');
return next();
});
Run Code Online (Sandbox Code Playgroud)
如果return next();
没有代码,它似乎不会导致错误,并从我能看到的东西开始工作.
cyb*_*sam 19
该的RESTify API指南有这样一段话:
您负责调用next()以运行链中的下一个处理程序.
他们所指的"链"是每条路线的处理链.通常,每个路由将由多个处理程序按特定顺序处理.链中的最后一个处理程序实际上不需要调用next() - 但是假设处理程序始终是最后一个处理程序是不安全的.在处理请求时,未能调用链中的所有处理程序可能会导致严重或细微的错误.
因此,作为良好的编程习惯,您的处理程序应始终使用适当的参数调用next().
after
另一个问题(当前)是,如果所有处理程序都不调用,则不会发出服务器事件next
。例如,如果您使用auditLogger 来记录使用after
事件的请求,则您将不会获得到达不调用next 的处理程序的任何请求的日志。
我已经打开了一个PR 来解决这个问题,以便以after
任何方式发出事件,但调用next
是使用 Restify 的应用程序的预期规范。