[英]fs.createReadStream error; uncaughtException: ENOENT: no such file or directory
我正在流管道中進行一些文件處理,並想測試一些錯誤情況。 我想到的第一件事是打開不存在的文件。 我發現我無法處理這種情況。 看起來 node.fs 沒有發出“錯誤”事件。 有人知道如何處理這個案子嗎? 我讀過 fs.unlink 也有同樣的情況。
const fName = 'C:/temp/fff.txt';
const outStream = fs.createWriteStream(fName + '.enc');
console.log(`-- 1111 ${fName} `);
fs.createReadStream(fName)
.pipe(outStream)
.on('open', () => {
console.log(`ON OPEN ${fName}`);
})
.on('error', (err) => {
console.log(`ON ERROR ${fName}; an error happened: ${err.message}`);
})
.on('close', () => {
console.log(`ON CLOSE ${fName}`);
})
.on('end', () => {
console.log(`ON END ${fName}`);
});
console.log(`-- 2222 ${fName} `);
如果文件存在輸出:
-- 1111 C:/temp/fff.txt
-- 2222 C:/temp/fff.txt
...
ON OPEN C:/temp/fff.txt
ON CLOSE C:/temp/fff.txt
如果文件不存在:
-- 1111 C:/temp/fff.txt
-- 2222 C:/temp/fff.txt
...
ON OPEN C:/temp/fff.txt
2022-06-13T19:28:48.379Z; error; uncaughtException: ENOENT: no such file or directory, open 'C:\temp\ffff.txt'
Error: ENOENT: no such file or directory, open 'C:\temp\ffff.txt';
C:\Users\p>
類似問題: 這里
人們問:是否有可能在 stream.on('error', ...) 生效之前發出錯誤事件?
非常感謝
看起來 stream.pipe 不轉發“錯誤”事件,所以如果你想處理錯誤,你需要做下面的事情,或者使用stream.pipeline
rstream
.on('error', handleError)
.pipe(foo)
.on('error', handleError)
.pipe(bar)
.on('error', handleError);
感謝這次討論
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.