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

时间:2016-08-25 17:54:23

标签: node.js express socket.io express-session

我目前正在尝试使用express 4.x和socket io 1.4实现会话管理,引用this answer。问题是快速会话函数的第二个参数是res(响应)对象,它在我的路由中返回'undefined'。这个问题已经过时了还是我做错了什么?

Anne Sullivan:190:12/01/2013
Hadassah Green:176:17/01/2013
Acton Galloway:107:18/01/2013
Nasim Gonzalez:163:18/01/2013
Patience Mccarty:101:18/03/2013
Sacha Stevens:164:01/04/2013
Lareina Morin:168:06/05/2013
Lael Aguirre:148:29/05/2013
Leonard Richard:154:02/06/2013
Laura Mercado:171:06/06/2013
Drew Fowler:173:28/07/2013
Bruno Hood:169:01/08/2013
Virginia Puckett:144:08/08/2013
Moses Mckay:177:09/08/2013
Amaya Lynn:149:11/08/2013
Chaney Mcgee:183:11/09/2013
Willa Bond:153:22/09/2013
Oren Flores:184:27/09/2013
Olga Buckley:181:11/10/2013
Carol Holman:102:24/10/2013
Jacob Tucker:105:05/11/2013
Veda Gillespie:125:09/11/2013
Thor Workman:152:12/11/2013
Cameron Phelps:187:17/11/2013
Jenette Morgan:160:28/11/2013
Mason Contreras:129:29/12/2013
Martena Sosa:158:30/12/2013
Vivian Stevens:146:20/01/2014
Benedict Massey:175:02/03/2014
Macey Holden:127:01/04/2014
Orla Estrada:174:06/04/2014
Maite Barr:106:24/04/2014
Helen Orr:108:10/05/2014
Randall Colon:199:27/05/2014
Avye Rose:109:07/06/2014
Cleo Decker:117:12/06/2014
Chase Gardner:104:14/06/2014
Mark Lynn:113:21/06/2014
Geraldine Solis:197:24/06/2014
Thor Wheeler:180:25/06/2014
Aimee Martin:192:21/07/2014
Gareth Cervantes:166:26/08/2014
Serena Fernandez:122:24/09/2014

这是我的sockets.js

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);

这是我得到的地方

  

未捕获的TypeError:参数res是必需的

1 个答案:

答案 0 :(得分:2)

在许多资料中提出的

sessionMiddleware()函数对我来说效果很好:

io.use(function(socket, next) {
    sessionMiddleware(socket.request, socket.request.res, next);
});

使用网络socket.io-client <=> socket.io服务器,直到我将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);
});

这对我来说很好!