我当前正在尝试使用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
:并替换为
{}
。但是,如果有人仍然需要并使用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/