如何与Socket.io 1.0和Express 4.x共享会话?我使用Redis商店,但我认为这无关紧要.我知道我必须使用中间件来查看cookie和获取会话,但不知道如何.我搜索但找不到任何工作
var RedisStore = connectRedis(expressSession);
var session = expressSession({
store: new RedisStore({
client: redisClient
}),
secret: mysecret,
saveUninitialized: true,
resave: true
});
app.use(session);
io.use(function(socket, next) {
var handshake = socket.handshake;
if (handshake.headers.cookie) {
var str = handshake.headers.cookie;
next();
} else {
next(new Error('Missing Cookies'));
}
});
Run Code Online (Sandbox Code Playgroud) 我有以下server.js运行:
module.exports = server;
var express = require('express');
var fs = require('fs');
var server = express.createServer();
var port = 58000;
server.listen(port);
var io = require('socket.io').listen(server);
server.use(express.static('/', __dirname + '/../public'));
server.use(express.logger());
io.on('connection', function(client){
console.log('new client connected ' + client);
client.on('message', function(){
console.log('client wants something');
});
});
Run Code Online (Sandbox Code Playgroud)
用于/ public子文件夹中文件的简单express.static服务器,以及socket.io功能.使用此设置,对'socket.io.js'文件的任何请求都会失败,即
http://localhost:58000/socket.io/socket.io.js
Run Code Online (Sandbox Code Playgroud)
返回404错误(找不到文件).静态文件服务器正常工作.如果我只使用'http'模块而不是'express'(注释掉express.static和express.logger行),则正确提供socket.io.js.我如何结合两种功能?