使用快速会话的套接字IO - socket.request.res undefined

nau*_*boy 6 node.js express socket.io express-session

我目前正在尝试使用express 4.x和socket io 1.4实现会话管理,引用此答案.问题是快速会话函数的第二个参数是res(响应)对象,它在我的路由中返回'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);
Run Code Online (Sandbox Code Playgroud)

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

}
Run Code Online (Sandbox Code Playgroud)

这是我得到的地方

未捕获的TypeError:参数res是必需的

Ale*_*ich 6

sessionMiddleware() 许多来源中提出的功能对我来说效果很好:

io.use(function(socket, next) {
    sessionMiddleware(socket.request, socket.request.res, next);
});
Run Code Online (Sandbox Code Playgroud)

使用 web socket.io-client<=> socket.ionode.js 服务器,直到我将socket.io-client-cpp应用程序添加到链中 - 服务器socket.io-client-cpp因上述错误而崩溃:

TypeError: argument res is required
Run Code Online (Sandbox Code Playgroud)

sessionMiddleware()功能上。人们建议socket.request.res完全从中间件中删除:

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

io.use(function(socket, next) {
    sessionMiddleware(socket.request, socket.request.res || {}, next);
});
Run Code Online (Sandbox Code Playgroud)

这对我来说很好用!