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



我目前正在尝试使用express 4实现会话管理。X和套接字IO 1.4,引用这个答案。问题是,表达会话函数的第二个参数是res(响应)对象,它在我的路由中返回"未定义"。这个问题是过时了还是我做错了什么?

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);

这是我的socket .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);
   })
}

就是从这里得到

Uncaught TypeError:参数res是必需的

在许多资源中提出的sessionMiddleware()函数对我来说工作得很好:

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

使用web socket.io-client <=> socket.io node.js服务器,直到我将socket.io-client-cpp应用程序添加到链-服务器在socket.io-client-cpp连接上崩溃并出现上述错误:

TypeError: argument res is required
sessionMiddleware()函数中的

。有人建议将socket.request.res从中间件中完全移除:

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

并替换为{}。但是,我认为它可以更改为稍微更好的变体,以防有人仍然需要和使用socket.request.res:

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

这对我来说很好!

最新更新