上节课使用了读写流进行读写数据,这种读写流的方式在 Node.js 中很常见。因此在 Node.js 中有更优雅的方法,就是使用管道 pipe

管道可以为我们做同样的处理,接到读取流的数据自动将数据放到写入流中,省去了手动监听 data
事件的操作。
代码上保留读写流,差别是不在需要监听 data
事件,取而代之改为使用管道。
'app.js'
var fs = require('fs');
var readStream = fs.createReadStream(__dirname + '/readme.txt', 'utf-8');
var writeStream = fs.createWriteStream(__dirname + '/writeme.txt'); // 创建写入流
readStream.pipe(writeStream);
回到服务端代码,我们可以从文件里读取内容,使用管道将内容返回给客户端。
var http = require('http');
var server = http.createServer(function(req, res){
var readStream = fs.createReadStream(__dirname + '/readme.txt', 'utf-8');
res.writeHead(200, {
'Content-Type': 'text/plain'
});
readStream.pipe(res); // 管道方式发送文本内容到客户端
});
server.listen(8888, '127.0.0.1'); // 监听本机上的 8888 端口
console.log('server is listening 8888');
下节课会讲如果发送 html 内容到客户端而不是文本内容。
网友评论