Fan*_*ane 5 session node.js typescript angular
我有一个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
}));
Run Code Online (Sandbox Code Playgroud)
在我的typescript/angular2前端环境中使用以下种子https://github.com/NathanWalker/angular2-seed-advanced我使用Http类在多个服务/组件中执行http请求.
然而,当我尝试再次请求服务器我尝试记录用户会话时,没有记录任何内容...我真的不知道为什么会发生这种情况,因为不仅没有保留用户的会话而且会话没有从http到套接字层系统共享(显然,如果没有创建它也不会被共享).
有谁知道这里可能有什么问题?如果需要我可以提供更多信息,但我真的不知道缺少什么.
小智 5
您可以轻松地使用Express运行socket.io.通过简单地调用socket.io的listen方法并将Express Session作为中间件传递(假设您将所有会话存储在FileSystem中而不是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);
});
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你!谢谢!