Express-session和express-socket.io-session在angular2 / typecript环境中不起作用

所以我有一个script.js设置服务器,如下所示:

var io_session = require("express-socket.io-session"); var e_session = require("express-session")({ secret: "a-secret", resave: true, saveUninitialized: true }); (...) //this block is the last "io.use" before the socket logic (io.on("connection")) io.use(io_session(e_session,{ autoSave: true })); 

在我的typecript / angular2前端环境中使用下面的种子https://github.com/NathanWalker/angular2-seed-advanced我使用Http类在多个服务/组件中执行http请求。

然而,当我尝试再次请求服务器的东西,我尝试logging用户会话,什么都没有logging…我不知道为什么会发生这样的事情,不仅用户的会话不被保留,而且会话不是从http共享到套接字层系统(很明显,如果它没有被创build,它也不被共享)。

有人知道这里可能是错的吗? 我可以提供更多的信息,如果需要,但我真的不知道什么是失踪…非常感谢您的帮助。

你可以很容易地使用Express运行socket.io。 通过简单地调用socket.io的侦听方法并将Express Session作为中间件传递给它( 假设您将所有会话存储在FileSystem中而不是Redis中 )。 我已经复制了你的代码,如下所示:

  var e_session = require("express-session"); var io_session = require("socket.io")(server); //Storing sessions in file system var sessionFileStore = require('session-file-store')(Session); //Express-Sessions as middleware var e_sessionMiddleware = e_session({ store: new sessionFileStore({ path: './project-x/sessions' }), secret: 'pass', resave: true, saveUninitialized: true }); //Use of Express-Session as Middleware io_session.use(function(socket, next) { e_sessionMiddleware(socket.handshake, {}, next); }); //Socket Io session and express sessions are now same io_session.on("connection", function(socket) { socket.emit(socket.handshake.session); }); 

希望能帮助到你! 谢谢!