【第2章 Node.js基础】2.7 Node.js 的流(一)可写流

🌈可写流

🚀什么是可写流

可写流是对数据被写入的目的地的一种抽象。

所有可写流都实现了 stream.Writable类定义的接口。

可写流的例子包括,也都是实现了可写流接口的双工流

  • 客户端的 HTTP 请求、
  • 服务器的HTTP 响应、
  • fs 的写入流、
  • zlib 流、
  • crypto 流、
  • TCP Socket、
  • 子进程 stdin、
  • process.stdout、
  • process.stderr等。

尽管可写流的具体实例可能略有差别,但所有可写流都遵循同一基本的使用模式,下面用一个示例解释这种模式:

js 复制代码
const myStream = getWritableStreamSomehow();
myStream.write('一些数据');
myStream.write('更多数据');
myStream.end('完成写入数据');

stream.Writable 类定义的主要事件如下。

  • close:当流或其底层资源被关闭时被触发。不是所有可写流都会触发该事件。
  • drain: 如果调用 stream.write(chunk)方法返回 false,则当可以继续写入数据到流时会触发该
    事件。
  • error: 写入数据发生错误时被触发。当触发该事件时,流还未被关闭。
  • finish: 调用 stream.end()方法且缓冲数据都已传给底层系统之后被触发
  • pipe:当在可读流上调用 stream.pipe()方法时被触发。
  • unpipe:当在可读流上调用 stream.unpipe()方法时被触发。当可读流通过管道流向可写流发生错误时,也会触发该事件。

🐯案例:fs 的写入流

javascript 复制代码
const fs = require("fs");
let writeStream = fs.createWriteStream("outpuut.txt");
let str = "爱上一个不回家的人";
writeStream.write(str,'UTF8');
writeStream.end();
writeStream.on('finish',()=>{
    console.log("写入完成");
})
writeStream.on('error',(error)=>{
    console.log("写入失败:",error);
})

⭐️动图演示

🐯案例:process.stdout

进程 I/O 同样也是 Writable 和 EventEmitter 的实例,耳听为虚眼见为实,请同学们可以打印:

javascript 复制代码
const stream = require("stream");
const events = require("events");

console.log(process.stdout instanceof stream.Writable); // true
console.log(process.stdout instanceof events.EventEmitter); // true
javascript 复制代码
process.stdout.write('你好!');
process.stderr.write('报错了啦')

在 node.js 中 console.log 内部就是由 process.stdout 实现的。对应 console.error 内部就是由 process.stderr 实现的。(没错 process.stderr 也是可写流)。

⭐️输出

shell 复制代码
$ node .\process-写入流.js
你好!报错了啦
相关推荐
abigale039 天前
webpack+vite前端构建工具 - 8 代码分割
前端·webpack·node.js
abigale039 天前
webpack+vite前端构建工具 - 9 webpack技巧性配置
前端·webpack·node.js
jghhh019 天前
深入浅出Node.js后端开发
node.js
ZJ_.9 天前
Electron自动更新详解—包教会版
linux·前端·javascript·windows·electron·前端框架·node.js
HsuYang9 天前
我是这样使用AI提高前端基础建设工具效率的
前端·架构·node.js
泓博9 天前
Node鼠标键盘屏幕控制
node.js
red润9 天前
Node.js 常用安全模块大全汇总
前端·javascript·node.js
listhi5209 天前
深入浅出Node.js中间件机制
中间件·node.js
yinke小琪10 天前
node
前端·node.js
盛夏绽放10 天前
Node.js 中的 JWT 认证:从生成到验证的完整指南
后端·node.js·有问必答