2016-11-26 15 views
5

Vì vậy, tôi có một script.js thiết lập các máy chủ lên mà đi như thế này:Express-phiên và bày tỏ-socket.io phiên không làm việc trong angular2/typecript môi trường

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

Trong nguyên cảo của tôi/angular2 frontend môi trường sử dụng các hạt giống sau đây https://github.com/NathanWalker/angular2-seed-advanced Tôi thực hiện các yêu cầu http trong một số dịch vụ/thành phần bằng cách sử dụng lớp Http.

Tuy nhiên, khi tôi cố gắng yêu cầu máy chủ lần nữa vì điều gì đó tôi cố gắng đăng nhập phiên người dùng, không có gì được ghi lại ... Tôi thực sự không biết tại sao điều này xảy ra không chỉ phiên cho người dùng đang được lưu giữ nhưng phiên cũng không được chia sẻ từ http đến hệ thống lớp socket (như rõ ràng, nếu nó không được tạo ra thì nó cũng không được chia sẻ).

Có ai biết điều gì có thể sai ở đây không? Tôi có thể cung cấp thêm thông tin nếu cần thiết nhưng tôi không thực sự biết những gì còn thiếu ... Cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn.

+0

Xin chào, vui lòng cập nhật câu hỏi của bạn với nhiều chi tiết hơn, như một dòng mã hoàn chỉnh hơn và tổng quan về vấn đề. Hãy thử một jsfiddle nếu nó phù hợp với bạn tốt hơn ... – bosco

+0

@ dscastro Đó là khó khăn vì bối cảnh của hạt giống angular2 là phức tạp ... – Fane

+0

Điều này giải quyết nó cho tôi: https://stackoverflow.com/questions/25532692/ how-to-share-sessions-với-socket-io-1-x-và-express-4-x –

Trả lời

5

Bạn có thể chạy socket.io với Express dễ dàng. Bằng cách đơn giản gọi phương thức lắng nghe của socket.io và chuyển cho nó Express Session như một Middleware (Giả sử bạn đang lưu trữ tất cả các phiên của mình trong FileSystem và không phải trong Redis). Tôi đã tạo bản sao Mã của bạn như sau:

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

Hy vọng điều đó sẽ hữu ích! Cảm ơn bạn!

+0

Bạn không tìm thấy câu trả lời hữu ích? –

+0

Nó vẫn không hoạt động. Tôi nghĩ rằng vấn đề là trong đối tượng HTTP của góc, không phải trong máy chủ. Khi tôi làm mới trang trên góc, ổ cắm không tiếp tục ... – Fane

Các vấn đề liên quan