Handle event streams being cancelled
h3 doesn't correctly handle unexpected stream closures, bypass h3 and operate directly on the Node.js ServerResponse object to handle them.
This commit is contained in:
parent
250ca9a1ac
commit
d8a31db44d
1 changed files with 8 additions and 9 deletions
|
@ -1,3 +1,4 @@
|
|||
import { pipeline } from "node:stream";
|
||||
import { addStream, deleteStream } from "~/server/streams";
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
|
@ -19,13 +20,11 @@ export default defineEventHandler(async (event) => {
|
|||
}
|
||||
})
|
||||
addStream(stream.writable);
|
||||
return new Response(
|
||||
stream.readable,
|
||||
{
|
||||
headers: {
|
||||
"Access-Control-Allow-Origin": "*",
|
||||
"Content-Type": "text/event-stream",
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
// Workaround to properly handle stream errors. See https://github.com/unjs/h3/issues/986
|
||||
setHeader(event, "Access-Control-Allow-Origin", "*");
|
||||
setHeader(event, "Content-Type", "text/event-stream");
|
||||
event.node.res.write("data: connected\n\n"); // Produce a response immediately to avoid the reply waiting for content.
|
||||
pipeline(stream.readable as unknown as NodeJS.ReadableStream, event.node.res, (err) => { /* ignore */ });
|
||||
event._handled = true;
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue