Search code examples
node.jsexpresssocket.ioexpress-session

How to access session data without request in NodeJs?


I'm building a socket based web app. Once user is login I saved it's data to session (express-session). Now issue is that when user open room then socket emit is call and on server side there is no req data because I need to check user id before opening the room. Below is my code.

server.js

const session = require('express-session');

app.use(session({
    key: 'userid',
    secret: 'zxcvasd',
    resave: false,
    saveUninitialized: false,
    cookie: {
        expires: 6000000
    }
}));

const socketCtrl = require('../controllers/socket.controller');

socket.on('open-broadcast', function (broadcastId) {
    socketCtrl.setBroadcastData(broadcastId);
});

socket.controller.js

exports.setBroadcastData = (broadcastId) => {
     // here I want session data like below
     // const user = req.session.user 
};

Solution

  • you can add a middleware for your express session like this using this npm package

    var ios = require('socket.io-express-session');
    var io = require("socket.io")(server);
    io.use(ios(Session));
    
    var sess = socket.handshake.session;
    sess.userId