使用express session的Socket IO - socket.request.res未定义

7
我正在尝试使用express 4.x和socket io 1.4实现会话管理,参考 这篇回答。问题在于express会话函数的第二个参数是res(response)对象,在我的路由中返回'undefined'。这个问题是否已经过时了,还是我做错了什么?
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);

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

}

这是我遇到的问题所在

Uncaught TypeError: 参数 res 是必需的


2
同样的问题,仍然相关。 - Flion
我也遇到了同样的问题!之前它是可以工作的,但我不知道发生了什么变化。 - buycanna.io
2
答案是,摆脱socket.request.res,只需使用{},它是垃圾!!...https://github.com/socketio/socket.io/issues/2971session(socket.request, socket.request.res,next) -> session(socket.request, {},next) - buycanna.io
@indospace.io 我认为您的评论可以作为答案添加。不过我已经找到了一个更好的解决方法,请看下面我的回答。 - Aleksey Kontsevich
1个回答

6
许多来源提出的 sessionMiddleware() 函数对我来说很有效:
io.use(function(socket, next) {
    sessionMiddleware(socket.request, socket.request.res, next);
});

使用web socket.io-clientsocket.io node.js服务器通信时,当我添加socket.io-client-cpp应用程序到链路中时,服务器会因为上述错误而崩溃:

TypeError: argument res is required
sessionMiddleware()函数中。人们建议完全从中间件中删除socket.request.res 并用{}代替。然而,如果有人仍然需要和使用socket.request.res,则可以将其更改为稍微更好的变体:
io.use(function(socket, next) {
    sessionMiddleware(socket.request, socket.request.res || {}, next);
});

这对我来说很好用!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接