nodejs如何捕获流的错误事件?
2025-09-09 21:00
nodejs
SQL Server
Oracle
MySQL
PostgreSQL
NoSQL
大数据
其他数据库
Windows
Windows Server
Linux
macOS
嵌入式
APACHE
NGINX
redis
Docker
git
互联网
tomcat
Html/Css
JavaScript
jQuery
HTML5
Angular
React
Vue
小程序
架构设计
面向对象
设计模式
领域驱动设计
Android开发
iOS开发
Flutter
鸿蒙
其他手机开发
敏捷开发
项目与团队管理
软件工程其他
.NET
Java
Python
Go
PHP
C++
Ruby
Swift
C语言
Erlang
Delphi
Scala
R语言
Verilog
Dart
Rust
其他语言
asp
nodejs
读书区
翻译区
求职面试
计算机图形学
软件测试
菜谱
SEO技术
摄影
生活技巧
7
0
0
0
标题录入
封面图
在 Node.js 中,处理流(`Stream`)时,如果发生错误,可以通过监听 `error` 事件来捕获这些错误。下面是一些常见的流类型(如 `Readable`、`Writable`、`Duplex`、`Transform`)如何捕获错误的示例。 --- ## ✅ 1. 捕获可读流(`Readable`)的错误 ```javascript const fs = require('fs'); const readableStream = fs.createReadStream('input.txt'); readableStream.on('data', (chunk) => { console.log('Received data:', chunk.toString()); }); readableStream.on('error', (err) => { console.error('Error in readable stream:', err.message); }); readableStream.on('end', () => { console.log('End of readable stream'); }); ``` --- ## ✅ 2. 捕获可写流(`Writable`)的错误 ```javascript const fs = require('fs'); const writableStream = fs.createWriteStream('output.txt'); writableStream.write('Hello, world!'); writableStream.on('error', (err) => { console.error('Error in writable stream:', err.message); }); writableStream.on('finish', () => { console.log('Wrote all data to file'); }); ``` --- ## ✅ 3. 使用 `pipe` 时捕获错误 如果你使用 `pipe()` 将一个流连接到另一个流,也可以在目标流上监听 `error` 事件: ```javascript const fs = require('fs'); const readable = fs.createReadStream('input.txt'); const writable = fs.createWriteStream('output.txt'); readable.pipe(writable); writable.on('error', (err) => { console.error('Error in writable stream during pipe:', err.message); }); ``` > 注意:如果 `readable` 流出错,它会触发自身的 `error` 事件,但不会自动传递给 `writable`。你需要手动监听 `readable` 的 `error` 事件。 --- ## ✅ 4. 处理 Transform 流的错误 ```javascript const { Transform } = require('stream'); class UppercaseTransformer extends Transform { _transform(chunk, encoding, callback) { this.push(chunk.toString().toUpperCase()); callback(); } } const transformStream = new UppercaseTransformer(); transformStream.on('error', (err) => { console.error('Error in transform stream:', err.message); }); transformStream.write('hello'); transformStream.end(); transformStream.on('data', (chunk) => { console.log('Transformed data:', chunk.toString()); }); ``` --- ## ✅ 5. 使用 async/await 和流(Node.js v16+) 如果你使用 `for await...of` 来消费流数据,可以这样捕获错误: ```javascript const fs = require('fs'); async function readStream() { const readable = fs.createReadStream('input.txt'); try { for await (const chunk of readable) { console.log('Data:', chunk.toString()); } } catch (err) { console.error('Error reading stream:', err.message); } } readStream(); ``` --- ## 📌 总结 | 流类型 | 监听事件 | 说明 | |------------|----------|--------------------------| | Readable | `error` | 捕获读取过程中的错误 | | Writable | `error` | 捕获写入过程中的错误 | | Transform | `error` | 捕获转换过程中的错误 | | Pipe | `error` | 在目标流上监听错误 | --- 如果你有特定的流实现(比如自定义流或第三方库),也可以告诉我,我可以提供更具体的错误捕获方式。
上一篇:
nodejs使用流有什么好处?
标题录入,一次不能超过6条
怎么分辨对方是朋友还是敌人
T:0.029895s,M:157.7 KB
返回顶部
留言
留言
评论