node.js - Express-session 和 express-socket.io-session 在 angular2/typescript 环境中不工作

标签 node.js session angular typescript

我有一个 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
}));

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

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

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

最佳答案

您可以轻松地让 socket.io 与 Express 一起运行。通过简单地调用 socket.io 的 listen 方法并将 Express Session 作为中间件传递给它(假设您将所有 session 存储在文件系统中而不是在 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);
    });

希望对您有所帮助!谢谢!

关于node.js - Express-session 和 express-socket.io-session 在 angular2/typescript 环境中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40814334/

相关文章:

angularjs - session 到期时 SPA 重新登录

javascript - Angular2 - 从变量分配管道

javascript - 列出仅显示 ID 的问题

javascript - 创建模型 REST API

javascript - Nodejs/Javascript动态间隔

css - Ionic 3 中的背景图像绑定(bind)不起作用,无论我如何传递它

Angular 4 Form Builder 数组添加验证器

javascript - 如何使用mongoose查找mongodb中的所有文档

authentication - 授权服务器上的 session 起什么作用?

php - 检查 session 是否设置,如果没有创建一个?