2

我正在阅读 Node.js in Action。有一个简单的静态文件服务器的例子,如下:

var server = http.createServer(function(req, res) {

    var url = parse(req.url);
    var path = join(root, url.pathname);

    var stream = fs.createReadStream(path);

    stream.pipe(res);
    stream.on('error', function(err) {
        res.statusCode=500;
        res.end('Internal Server Error');
    });
});

我的问题是,如果在将“错误”处理程序添加到流之前,stream.pipe() 调用遇到错误会发生什么?它会“错过”这个错误吗?

谢谢!

4

1 回答 1

4

当您编写stream.pipe(res)时,这并不意味着流式传输将直接从该行开始,它只会被安排在请求处理程序中的代码完成后运行(节点在单个线程中运行代码,因此它只能做一件事一次)。

请求处理程序完成后,控制权交还给内部 Node 事件循环,该循环将检查是否有任何 I/O 需要执行,例如处理您的流。那时,error处理程序已经到位以处理任何错误。

于 2013-10-10T19:52:57.957 回答