错误:Error [ERR_STREAM_WRITE_AFTER_END]: write after end
场景:通过 fs.createReadStream
读取图片,发送给客户端
server.on('request', function (req, resp) {
if (req.url == '/') {
//告诉对方我发送的数据类型是什么
resp.setHeader('Content-Type', 'text/html; charset=utf-8');
resp.write("hello 小郭<hr/> <image src='/img'></image>")
resp.end()
} else if (req.url == '/img') {
//发送图片
resp.setHeader('Content-Type', 'image/jpg;');
var rs = fs.createReadStream('5.jpg');
rs.once('close', function () {
resp.end()//停止resp写入,告诉服务端写完了,可以发送了
});
rs.on('data', function (data) {//多次读取文件
resp.write(data)//文件读取完成后触发close 事件
});
//resp.end()异步操作,出错!Error [ERR_STREAM_WRITE_AFTER_END]: write after end
}
});
fs.createReadStream(path)
读取文件是一个异步操作,需要绑定 data
事件
关键:data事件读取完毕后自动关闭流,应该在此处结束 resp 的写入
重点:fs.createReadStream 的事件和异步特性