我有一个 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/