Stream.pipeline always throw [ERR_STREAM_PREMATURE_CLOSE]
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- JavaScript
- Star
- 122k
- Fork
- 37.3k
- Merge trung bình
- 4 ngày 2 giờ
- Pull request đã merge (30 ngày)
- 283
Mô tả
Hello.
Stream.pipeline throws error [ERR_STREAM_PREMATURE_CLOSE]: Closed prematurely, but the stream throw error new Error('destroy').
In a real application, a large file is uploaded, sometimes the server timed out the connection, and when using stream.pipeline it is not clear what error occurred, ERR_STREAM_PREMATURE_CLOSE is always returned.
Version: 15.5.0
Platform: Ubuntu 20.10 x64
/* eslint-disable */
import http from 'https';
import { createWriteStream } from 'fs';
import { pipeline } from 'stream/promises';
const httpRequest = url => new Promise(resolve => http.get(url, res => resolve(res)));
const FILENAME_TMP = './1.tmp'
const linkFile = 'https://nodejs.org/dist/v15.5.0/node-v15.5.0-linux-x64.tar.xz';
const downloadStream = await httpRequest(linkFile, { responseType: 'stream' });
// view error
downloadStream.on('error', err => console.log('onError', err));
// break download
setTimeout(() => downloadStream.destroy(new Error('destroy')), 1000);
try {
await pipeline(
downloadStream,
createWriteStream(FILENAME_TMP)
);
console.log('Done');
} catch (err) {
console.log('onPipeline', err);
}
onError Error: destroy
at Timeout._onTimeout (file:///home/user/Project/parser/3.js:17:41)
at listOnTimeout (node:internal/timers:556:17)
at processTimers (node:internal/timers:499:7)
onPipeline Error [ERR_STREAM_PREMATURE_CLOSE]: Premature close
at new NodeError (node:internal/errors:278:15)
at IncomingMessage.onclose (node:internal/streams/end-of-stream:117:38)
at IncomingMessage.emit (node:events:376:20)
at IncomingMessage._destroy (node:_http_incoming:169:10)
at _destroy (node:internal/streams/destroy:67:23)
at IncomingMessage.destroy (node:internal/streams/destroy:59:5)
at Timeout._onTimeout (file:///home/user/Project/parser/3.js:17:33)
at listOnTimeout (node:internal/timers:556:17)
at processTimers (node:internal/timers:499:7) {
code: 'ERR_STREAM_PREMATURE_CLOSE'
}
Thank's
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Sử dụng bản tái hiện Node.js 15.5.0 được cung cấp làm điểm bắt đầu; kiểm tra stream/promises cùng các đường dẫn end-of-stream và destroy được hiển thị trong stack trace. So sánh lỗi destroy của stream nguồn với kết quả ERR_STREAM_PREMATURE_CLOSE của pipeline, và xác định done là một bài kiểm thử hồi quy hoặc hành vi được lập tài liệu, làm rõ việc truyền lỗi như dự kiến.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- javascript, nodejs
- Lĩnh vực
- backend
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Ít trao đổi
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 42/100