-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Closed
Description
Which project does this relate to?
Start
Describe the bug
While trying to implement SSE, it seems the abort event is not triggered on request.signal when the connection is closed.
import { createAPIFileRoute } from '@tanstack/react-start/api'
export const APIRoute = createAPIFileRoute('/api/login/test')({
GET: ({ request, params }) => {
const responseHeaders = {
"Content-Type": "text/event-stream",
"Cache-Control": "no-cache",
Connection: "keep-alive",
};
const stream = new ReadableStream({
start(controller) {
const encoder = new TextEncoder();
// Function to send messages to this client
const send = (message: string) => {
controller.enqueue(encoder.encode(`data: ${message}\n\n`));
};
request.signal.addEventListener("abort", () => {
console.log("Client disconnected ");
controller.close();
});
// Send an initial message
setInterval(() => {
send("Ping");
}, 1000);
},
cancel() {
// Cleanup logic if needed
console.log("Client disconnected")
},
});
return new Response(stream, { headers: responseHeaders });
},
})Your Example Website or App
https://stackblitz.com/edit/tanstack-router-xajqhjwq?file=app%2Froutes%2Fapi%2Fsse.ts&preset=node
Steps to Reproduce the Bug or Issue
- Go to: https://stackblitz.com/edit/tanstack-router-xajqhjwq?file=app%2Froutes%2Fapi%2Fsse.ts&preset=node
- Navigate to /api/sse
- You will see
Sending message to clientin the console and also the ping message on the screen. - Refresh the page or navigate to /
- You should see
Client disconnectedbut neither method is called.
Expected behavior
Abort event or cancel should be called when the request is canceled.
request.signal.addEventListener('abort', () => {
console.log('Client disconnected ');
controller.close();
});cancel() {
// Cleanup logic if needed
console.log('Client disconnected');
},Screenshots or Videos
No response
Platform
- OS: [e.g. macOS, Windows, Linux]
- Browser: [e.g. Chrome, Safari, Firefox]
- Version: [e.g. 91.1]
Additional context
No response
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels