[Nitro][Nuxt3] How to get nitro handler's event inside socket events #5021
-
I am following the documentation, but I can't figure out how to get the handler's event inside socket events. import type { NitroApp } from "nitropack";
import { Server as Engine } from "engine.io";
import { Server } from "socket.io";
import { defineEventHandler } from "h3";
export default defineNitroPlugin((nitroApp: NitroApp) => {
const engine = new Engine();
const io = new Server();
io.bind(engine);
io.on("connection", (socket) => {
// I want to access to handler's event here...
});
nitroApp.router.use("/socket.io/", defineEventHandler({
handler(event) {
engine.handleRequest(event.node.req, event.node.res);
event._handled = true;
},
websocket: {
open(peer) {
const nodeContext = peer.ctx.node;
const req = nodeContext.req;
// @ts-expect-error private method
engine.prepare(req);
const rawSocket = nodeContext.req.socket;
const websocket = nodeContext.ws;
// @ts-expect-error private method
engine.onWebSocket(req, rawSocket, websocket);
}
}
}));
}); Thank you in advance! 🙏 |
Beta Was this translation helpful? Give feedback.
Answered by
darrachequesne
May 7, 2024
Replies: 1 comment
-
Hi! I think the easiest way is to keep a reference to the import type { NitroApp } from "nitropack";
import { Server as Engine } from "engine.io";
import { Server } from "socket.io";
import { defineEventHandler } from "h3";
export default defineNitroPlugin((nitroApp: NitroApp) => {
const engine = new Engine();
const io = new Server();
io.bind(engine);
io.on("connection", (socket) => {
const context = socket.request.context;
});
nitroApp.router.use("/socket.io/", defineEventHandler({
handler(event) {
event.node.req.context = event.context;
engine.handleRequest(event.node.req, event.node.res);
event._handled = true;
},
websocket: {
open(peer) {
const nodeContext = peer.ctx.node;
const req = nodeContext.req;
// @ts-expect-error private method
engine.prepare(req);
const rawSocket = nodeContext.req.socket;
const websocket = nodeContext.ws;
// @ts-expect-error private method
engine.onWebSocket(req, rawSocket, websocket);
}
}
}));
}); |
Beta Was this translation helpful? Give feedback.
0 replies
Answer selected by
anhnm96
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi! I think the easiest way is to keep a reference to the
event.context
object on thereq
object: