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

Fan*_*ane 5 session node.js typescript angular

我有一个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
}));
Run Code Online (Sandbox Code Playgroud)

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

然而,当我尝试再次请求服务器我尝试记录用户会话时,没有记录任何内容...我真的不知道为什么会发生这种情况,因为不仅没有保留用户的会话而且会话没有从http到套接字层系统共享(显然,如果没有创建它也不会被共享).

有谁知道这里可能有什么问题?如果需要我可以提供更多信息,但我真的不知道缺少什么.

小智 5

您可以轻松地使用Express运行socket.io.通过简单地调用socket.io的listen方法并将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);
    });
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!谢谢!