我当前正在尝试使用express 4.x和socket io 1.4来实现 session 管理,请引用this answer。问题在于,快速 session 功能的第二个参数是res(响应)对象,该对象在我的 route 返回“未定义”。这个问题是过时的还是我做错了什么?

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

}

这是我得到的

最佳答案

在许多资源中提出的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连接上崩溃并出现上述错误:



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

    这对我来说很好!

    关于node.js - 使用快速 session 的套接字IO-socket.request.res未定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39151835/

    10-16 18:20