使用快速会话的套接字 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
:
并替换为。但是,如果有人仍然需要并使用
socket.request.res
,请认为它可以更改为稍微更好的变体:
io.use(function(socket, next)
sessionMiddleware(socket.request, socket.request.res || , next);
);
这对我来说很好用!
【讨论】:
以上是关于使用快速会话的套接字 IO - socket.request.res 未定义的主要内容,如果未能解决你的问题,请参考以下文章
如何将用户名从php会话存储到nodejs中的socket.io库和页面刷新时套接字连接断开。为啥?