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

Posted

技术标签:

【中文标题】使用快速会话的套接字 IO - socket.request.res 未定义【英文标题】:Socket IO using express session - socket.request.res undefined 【发布时间】:2017-01-02 06:32:46 【问题描述】:

我目前正在尝试使用 express 4.x 和套接字 io 1.4 实现会话管理,引用 this answer。问题是 express 会话函数的第二个参数是 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);

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


这是我得到的地方

未捕获的类型错误:需要参数 res

【问题讨论】:

同样的问题,仍然相关 我也遇到了同样的问题!不久前我让它工作了,但我不知道发生了什么变化。 答案,去掉socket.request.res,直接使用,这是gawwbage!!....github.com/socketio/socket.io/issues/2971session(socket.request, socket.request.res,next) -> session(socket.request, ,next) @indospace.io 我认为您的评论可以作为答案添加。但是我找到了更好的解决方法,请参阅下面的答案。 【参考方案1】:

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://***.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);
);

这对我来说很好用!

【讨论】:

以上是关于使用快速会话的套接字 IO - socket.request.res 未定义的主要内容,如果未能解决你的问题,请参考以下文章

仅套接字 IO 会话不持久

如何访问socket.io连接中的会话对象[重复]

Heroku上的Socket.io“会话ID未知”错误

如何将用户名从php会话存储到nodejs中的socket.io库和页面刷新时套接字连接断开。为啥?

socket.io 身份验证与共享会话数据,io.use() 如何工作

Rust 中的套接字服务器不接收