2016-11-26 7 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 
})); 

मेरी टाइपप्रति में/निम्नलिखित बीज https://github.com/NathanWalker/angular2-seed-advanced का उपयोग करके कोणीय 2 फ्रंटेंड पर्यावरण मैं एचटीपी कक्षा का उपयोग कर कई सेवाओं/घटकों में http अनुरोध करता हूं।

हालांकि, जब मैं सर्वर के लिए फिर से अनुरोध करने का प्रयास करता हूं तो मैं उपयोगकर्ता सत्र को लॉग इन करने का प्रयास करता हूं, कुछ भी लॉग नहीं होता है ... मुझे नहीं पता कि यह क्यों हो रहा है क्योंकि उपयोगकर्ता के लिए सत्र न केवल रखा जा रहा है लेकिन सत्र को http से सॉकेट लेयर सिस्टम में साझा नहीं किया जा रहा है (जाहिर है, अगर यह नहीं बनाया गया है तो इसे भी साझा नहीं किया जा रहा है)।

क्या कोई जानता है कि यहां क्या गलत हो सकता है? यदि आवश्यक हो तो मैं अधिक जानकारी प्रदान कर सकता हूं लेकिन मुझे नहीं पता कि क्या गुम है ... आपकी मदद के लिए बहुत बहुत धन्यवाद।

+0

नमस्ते, कृपया अधिक जानकारी के साथ अपने प्रश्न को अपडेट करें, जैसे कि एक पूर्ण कोड लाइन और समस्या के आसपास सिंहावलोकन। अगर यह आपको बेहतर बनाता है तो एक jsfiddle कोशिश करें ... – bosco

+0

@dscastro यह कठिन है क्योंकि कोणीय 2 बीज का संदर्भ पहले से ही जटिल है ... – Fane

+0

यह मेरे लिए हल किया गया: https://stackoverflow.com/questions/25532692/ कैसे-टू-शेयर-सत्र-साथ-सॉकेट-io-1-x-and-express-4-x –

उत्तर

5

आप आसानी से एक्सप्रेस के साथ socket.io चला सकते हैं। सॉकेट.यो की सुनो विधि का आविष्कार करके और एक्सप्रेस सत्र को मिडलवेयर के रूप में पास करके (मान लें कि आप फाइलसिस्टम में अपने सभी सत्रों को संग्रहीत कर रहे हैं, न कि 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

संबंधित मुद्दे