Node.js - 这会错过一些错误吗?

时间:2013-10-10 19:27:40

标签: node.js

我正在阅读Action.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()调用遇到错误会发生什么?它会“错过”这个错误吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

当您编写stream.pipe(res)时,并不意味着流式传输将从该行开始,只需在请求处理程序中的代码完成后调度就会运行(节点在单线程,所以它一次只能做一件事。)

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