我目前正在尝试使用express 4.x和socket io 1.4实现会话管理,引用
this answer.问题是快速会话函数的第二个参数是res(响应)对象,它在我的路由中返回’undefined’.这个问题已经过时了还是我做错了什么?
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); }) }
这是我得到的地方
Uncaught TypeError: argument res is required
解决方法
在许多来源中提出的sessionMiddleware()函数对我来说很好:
io.use(function(socket,next) { sessionMiddleware(socket.request,next); });
使用web socket.io-client< => socket.io node.js服务器,直到我将socket.io-client-cpp应用程序添加到链中 – 服务器在socket.io-client-cpp连接上崩溃并出现上述错误:
06001
在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,socket.request.res || {},next); });
这对我来说很好!