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



在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() ?
    };

不同之处在于,在 onEnd 内部,只有在发出 end 事件时,它才会异步执行。在onEnd之外,在最后一行,它不会等待end事件,一旦代码到达该行就会执行。

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

最新更新