我目前正在尝试使用express 4实现会话管理。X和套接字IO 1.4,引用这个答案。问题是,表达会话函数的第二个参数是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);
这是我的socket .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);
})
}
就是从这里得到
Uncaught TypeError:参数res是必需的
在许多资源中提出的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://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);
});
这对我来说很好!