节点 http res.end

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)

这不是必要的,因为管道意味着结束吗?当我写回复时,我应该总是结束它吗?

Rod*_*ros 6

当可读流完成读取(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()在将来的某个时间调用该事件。