hud*_*nd7 6 javascript http node.js
我目前正在阅读“Node.js in action”以及一些在线学习资源。书中的第一个示例展示了如何通过管道将流传递到响应。像这样:
var http = require('http'),
fs = require('fs');
http.createServer(function(req, res){
res.writeHead(200, {"Content-Type": "image/png"});
fs.createReadStream("./image.png").pipe(res);
}).listen(xxxx)
Run Code Online (Sandbox Code Playgroud)
我的问题是这段代码的有效性如何?我的印象是,在使用 http 时,您应该始终以:
res.end();
Run Code Online (Sandbox Code Playgroud)
这不是必要的,因为管道意味着结束吗?当我写回复时,我应该总是结束它吗?
当可读流完成读取(image.png
文件)时,默认情况下,它会发出end()
事件,该事件将调用end()
可写流(res
流)上的事件。在这种情况下,您无需担心致电end()
。
值得指出的是,在这种情况下,调用事件res
后您将不再可写。end()
因此,如果您想保持它可写,只需将end: false
选项传递给pipe()
,例如:
fs.createReadStream("./image.png").pipe(res, { end: false });
Run Code Online (Sandbox Code Playgroud)
,然后end()
在将来的某个时间调用该事件。