Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Socket IO using express session - socket.request.res undefined

I am currently trying to implement session management using express 4.x and socket io 1.4, referencing this answer. The problem is that the second argument to the express session function is the res (response) object which is returning 'undefined' in my route. Is this question outdated or am I doing something wrong?

var http = require('http');

var session = require('express-session')(
{
  saveUninitialized : false,
  resave:false,
  secret:'secretstuff',
  cookie : {
    path : '/'
  }
}
);

var express = require('express');

var app = express();

app.use(session)

var http_server = http.createServer(app);

var io = require('./sockets')(http_server,session);

here is my sockets.js

var Server = require('socket.io');

module.exports = function(http_server, session)
{
   var io = new Server(http_server);

   io.use(function(socket,next){

      //socket.request.res === undefined
      session(socket.request, socket.request.res,next);
   })

}

which is where I get

Uncaught TypeError: argument res is required

like image 845
naughty boy Avatar asked Aug 25 '16 17:08

naughty boy


People also ask

What is the difference between WebSocket and socket IO?

Key Differences between WebSocket and socket.ioIt provides the Connection over TCP, while Socket.io is a library to abstract the WebSocket connections. WebSocket doesn't have fallback options, while Socket.io supports fallback. WebSocket is the technology, while Socket.io is a library for WebSockets.


1 Answers

sessionMiddleware() function proposed in many sources worked fine for me:

io.use(function(socket, next) {
    sessionMiddleware(socket.request, socket.request.res, next);
});

with web socket.io-client <=> socket.io node.js server until I added socket.io-client-cpp application to the chain - server crashed on socket.io-client-cpp connection with above error:

TypeError: argument res is required

in sessionMiddleware() function. People suggest to remove socket.request.res from the middleware completely:

  • https://stackoverflow.com/a/29448630/630169
  • https://github.com/socketio/socket.io/issues/2971#issuecomment-326084664

and replace with {}. However think it could be changed to slightly better variant in case somebody still need and use socket.request.res:

io.use(function(socket, next) {
    sessionMiddleware(socket.request, socket.request.res || {}, next);
});

This works fine for me!

like image 196
Aleksey Kontsevich Avatar answered Oct 16 '22 19:10

Aleksey Kontsevich