2016-11-26 79 views
5

所以我有一个的script.js设置服务器最多的是这样的:快速会话和表达,socket.io-会议angular2/typecript环境不工作

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

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

然而,当我试图再次请求服务器的东西,我尝试登录的用户会话中,没有记录......我真的不知道为什么发生这种情况的不仅是会话的用户不被保留,但会话不会被从http共享到套接字层系统(很明显,如果它没有被创建,它也不会被共享)。

有谁知道什么可能是错在这里?如果需要,我可以提供更多信息,但我真的不知道缺少什么......非常感谢您的帮助。

+0

你好,请更多的细节更新您的问题,如解决问题更完整的代码行和概述。尝试的jsfiddle如果它更适合你... – bosco

+0

@dscastro这很难,因为angular2种子的背景是复杂的已经... – Fane

+0

这解决了这个问题对我来说: https://stackoverflow.com/questions/25532692/ how-to-share-sessions-socket-io-1-x-and-express-4-x –

回答

5

您可以用socket.io快速轻松运行。通过简单地调用socket.io的听法和传递的Express会话作为中间件(假设您存储文件系统所有的会议,而不是在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); 
    }); 

希望它有帮助!谢谢!

+0

没有找到答案有用吗? –

+0

它仍然不起作用。我认为问题出在角度的HTTP对象上,而不是在服务器上。当我在角度上刷新页面时,套接字不会持续... – Fane