我目前正在阅读“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)
我的问题是这段代码的有效性如何?我的印象是,当你使用http时,你总是应该结束:
res.end();
这是不是必要的,因为它意味着结束?什么时候写回应我总是应该结束它?
答案 0 :(得分:2)
当您的可读流完成读取(image.png
文件)时,默认情况下会发出end()
事件,这将在可写流上调用end()
事件({{ 1}} stream)。在这种情况下,您不必担心调用res
。
值得指出的是,在这种情况下,调用end()
事件后,res
将不再可写。因此,如果您想让它保持可写,只需将end()
选项传递给end: false
,例如:
pipe()
,然后在将来的某个时间调用fs.createReadStream("./image.png").pipe(res, { end: false });
事件。
答案 1 :(得分:0)
end()。有一套很棒的教程here。其中一个练习(带有流的#11 http文件服务器)是创建一个静态文件服务器。这是代码的样子:
var fs = require('fs'),
http = require('http'),
port = parseInt( process.argv[2] ),
file = process.argv[3],
opts = { encoding:'utf8' },
server;
server = http.createServer(function(req, res) {
console.log( 'request url: ', req.url );
res.writeHead(200, { 'Content-type':'text/plain' });
var stream = fs.createReadStream( file );
stream.pipe( res );
stream.on('end', function() {
console.log('stream ended...');
});
});
server.listen( port, function() {
console.log('server listening on port: ', port );
});
还有很多其他好的教程和例子。希望这会有所帮助。