2016-11-26 49 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