如何在NodeJS http服务器中中止处理请求

时间:2016-11-25 15:51:16

标签: node.js

我的标准回调地狱http服务器就像(简化):

http.createServer((req, res) => {
    doSomething(() => {
        doMoreSomethings(() => {
            if (!isIt())
                // explode A

            if (!isItReally())
                // explode B

            req.on('data', (c) => {
                if (bad(c))
                  // explode C
            });

            req.on('end', () => {
                // explode D
            });
        });
    });
};

我知道结束请求的唯一方法是res.end(),这是异步的,所以在你调用之后它会运行(据我所知)。有没有办法做一个伪 - process.exit中途飞行并中止处理请求,所以我不浪费时间在其他东西上?例如,我如何停在上面的// explode行并且不处理其他任何内容? throw不超越范围边界。基本上,我认为,我希望return或者从嵌套回调中突破createServer回调。这样做的唯一方法是能够使用单个路径的代码并且每个步骤都没有多个语句吗?比如,水平编码,而不是垂直的KLOC。

我显然是Node noob。

修改:提出问题的另一种方式可能是:是否可以在// explode C行中止,不再读取任何数据,不处理end事件,并且不再处理doMoreSomethings回调中的任何行(如果有的话)?我猜测后者是不可能的,因为据我所知,doMoreSomethings运行完成,包括附加数据和结束事件处理程序,然后只有队列中的下一个事件(可能是数据)事件)得到处理,此时doMoreSomethings完成。但我可能错过了一些东西。此代码是否只是压缩,调用isItisItReally,分配事件处理程序,跳出所有回调,createServer回调完成,然后所有额外的东西(数据/结束/等)都从事件队列中运行?

1 个答案:

答案 0 :(得分:0)

通常,您将使用return语句。当您拨打return下面的任何代码时,它将无法执行。虽然,如果您的函数isIt()isItReally()是异步函数,那么您将遇到麻烦,因为它们以同步方式使用。