如何停止中间件链?

Lev*_*Lev 2 node.js express

如果发生错误,如何正确终止中间件链?

在我的代码中

    if (someProblem) {
        res.status(statuscode).json({message: 'oops'});
        return;
    }
Run Code Online (Sandbox Code Playgroud)

然而,此后链中的中间件一直在打电话给我Can't set headers after they are sent错误。

jfr*_*d00 6

中间件不能自行发展。next()只要您不调用next(),它就只会转到链中的下一步,只要您不调用,就不会执行下一步。

因此,如果您只是发送响应并返回(而不调用next()),那么您应该不会有任何问题。

您在问题中显示的代码本身不会导致您所引用的错误消息,因此必须继续进行更多操作,以确保不会出现错误。

  • @peterchaula - 首先,restify 与 Express 不同。在express中,你可以用“next()”做四件事。1) 你可以发送响应而不调用`next()`。这完成了请求并停止进一步的路由。2)您可以只执行简单的“next()”,它会前进到链中的下一个路由。3) 您可以调用`next('route')`来绕过该路由器中的所有其余路由并继续在其他路由器中进行路由。4) 您可以执行“next(err)”,这将停止任何进一步的路由并将错误传递给默认错误处理程序,该处理程序将发送错误响应。 (4认同)