/ / ¿Cómo paso el objeto req o res en socket.io? - node.js, express, socket.io

¿Cómo paso el objeto req o res en socket.io? - node.js, express, socket.io

Mi objetivo es guardar un objeto en una base de datos req.user. Así que el escenario es que, cuando socket.io recibió algo, se guardará en una base de datos req.user.

Aquí está el código.

io.on("connection", function(socket){
socket.on("notify", function(msg){
User.findById(req.user._id, function(err, found) {

found.notifications.push(msg);
found.save(function(err) {

io.emit("notify", msg);
});
});

});
});

Sin embargo recibí este error,

Missing error handler on `socket`.
ReferenceError: req is not defined

Respuestas

-1 para la respuesta № 1

Cada conexión Socket.IO tiene una request propiedad inyectada a ella, pero es la que hizo el apretón de manos. Puedes usar eso como:

socket.on("notify", function(msg) {
User.findById(socket.request...

Pero ten en cuenta algunas cosas:

Tu usuario debe Ser autenticado en el momento en que ocurra el apretón de manos.

Si algo sucede dentro de las sesiones y esas cosas,no se actualizarán porque la solicitud simplemente se inyecta y no cambia su estado. Si está utilizando una aplicación de una sola página con una sola solicitud, y sockets a partir de ahí, debería estar bien, pero si está utilizando varias páginas, es un gran riesgo.

Esto es lo que funcionará para usted, pero debe usarlo con cuidado :)

https://www.npmjs.com/package/express-socket.io-session