expressjs在中间件中调用next()的位置

时间:2015-01-22 10:36:29

标签: node.js express

在end()函数之外或内部调用next()有什么区别? 我还需要将它调用到onError()吗?

PS:我需要下一个处理程序中的数据。

return function (req, res, next){

        req.setEncoding('utf8');
        req.rawBody = '';

        req.on('data', function (chunk) {
            req.rawBody += chunk;
        });

        req.on('aborted', onAborted);

        function onAborted() {
            logger.warn('Request has been aborted [IP= ' + req.ip + '].');
        }

        req.on('error', onError);

        function onError() {
            logger.warn('Unable to read request [IP= ' + req.ip + '].');
            // next() ?
        }

        req.on('end', onEnd);

        function onEnd() {
            next()
        }

        // next() ?
    };

1 个答案:

答案 0 :(得分:1)

区别在于onEnd内部只有在发出end事件时才会异步执行。在onEnd之外的最后一行,它不会等待end事件,并且会在代码到达该行时立即执行。

在开发express应用时,将错误(当它发生时)传递给next()函数并使用中间件(如errorHandler)处理它是一个很好的实践。主文件。