Socket IO using express session - socket.request.r

2019-06-20 06:30发布

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

1条回答
祖国的老花朵
2楼-- · 2019-06-20 06:57

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:

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!

查看更多
登录 后发表回答