我正在阅读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()调用遇到错误会发生什么?它会“错过”这个错误吗?
谢谢!
答案 0 :(得分:4)
当您编写stream.pipe(res)
时,并不意味着流式传输将从该行开始,只需在请求处理程序中的代码完成后调度就会运行(节点在单线程,所以它一次只能做一件事。)
请求处理程序完成后,控制权将返回到内部节点事件循环,该循环将检查是否有任何I / O要执行,例如处理您的流。那时,error
处理程序已经到位,可以处理任何错误。