Last active
April 22, 2024 20:39
-
-
Save Atinux/05836469acca9649fa2b9e865df898a2 to your computer and use it in GitHub Desktop.
SSE endpoint example with Nuxt 3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ~/server/api/sse.ts | |
export default defineEventHandler(async (event) => { | |
if (!process.dev) return { disabled: true } | |
// Enable SSE endpoint | |
setHeader(event, 'cache-control', 'no-cache') | |
setHeader(event, 'connection', 'keep-alive') | |
setHeader(event, 'content-type', 'text/event-stream') | |
setResponseStatus(event, 200) | |
let counter = 0 | |
const sendEvent = (data: any) => { | |
event.node.res.write(`id: ${++counter}\n`); | |
event.node.res.write(`data: ${JSON.stringify(data)}\n\n`); | |
} | |
myHooks.hook('sse:event', sendEvent) | |
// Let the connection opened | |
event._handled = true; | |
}) |
there is no relation between SSE with Event Emitter
as you can see SSE only aplicable on request method GET, so when you need to trigger the EventSource from request method POST, you need different approach
so in my opinion, i need to create function outside SSE route that can be trigger the EventSource, in this case i can use Event Emitter / hookable, and then inside POST route i can trigger the Event Emitter
i have a simple example in here
As @martinszeltins Says we shouldn't discuss it here. Let's not spam the gist here. Thanks for informing 🤝🏻
If anyone has something to say, I've seperate issue here.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@jd-solanki I think we're spamming this gist with notifications. But to answer your question, you do not make POST requests to SSE endpoint. SSE is for receiving events from the server. If you want to send data to the backend, you would use a different endpoint (graphql, rest etc.). And then whenever the backend has something new to say, it will stream a message to the client using the established SSE/EventSource connection. Feel free to provide a code example of what you're trying to do.