解决不能调用next()的后果

sto*_*mux 13 node.js restify

我一直在使用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().


ger*_*d00 5

after另一个问题(当前)是,如果所有处理程序都不调用,则不会发出服务器事件next。例如,如果您使用auditLogger 来记录使用after事件的请求,则您将不会获得到达不调用next 的处理程序的任何请求的日志。

我已经打开了一个PR 来解决这个问题,以便以after任何方式发出事件,但调用next是使用 Restify 的应用程序的预期规范。