socket.io不存储会话

我有使用node.js和socket.io的应用程序。

我想在会话中存储一些信息。 我做了一个例子。 但是我的代码不起作用。 当我运行脚本和刷新页面时,我看到:

NaN 2 

接下来,当我刷新页面时,我可以看到

 NaN 2 NaN 2 

所以会话不存储。 我如何修复我的代码?

 var Session = require('express-session'), SessionStore = require('session-file-store')(Session); var session = Session({ secret: 'pass', resave: true, saveUninitialized: true }); var config = require("./config.json"); var express = require('express'); var app = express(); var socketio = require('socket.io'); var server = app.listen(3000, function(){ console.log('Start') }); var io = require('socket.io').listen(server); app.use(session); // session support app.get('/', function (req, res) { req.session.ziom = 1; req.session.save(); console.log('dec'); }); var http = require('http'); var ios = require('socket.io-express-session'); io.use(ios(session)); io.sockets.on('connection', function(socket){ console.log(parseInt(socket.handshake.session.test)); socket.handshake.session.test =2; socket.handshake.session.save(); console.log(parseInt(socket.handshake.session.test)); }); 

我不明白这个错误,因为我复制 – 通过你的代码和一切*工作正常!

*我看不到所有的代码/项目,我不知道是否有一个index.html文件与节点服务器启动连接事件。 我用最less的代码来testing这个文件。

更改我的app.js是res.sendfile('./index.html');

查看我所有的代码以进行比较。

app.js

 var Session = require('express-session'), SessionStore = require('session-file-store')(Session); var session = Session({ secret: 'pass', resave: true, saveUninitialized: true }); var express = require('express'); var app = express(); var socketio = require('socket.io'); var server = app.listen(3000, function(){ console.log('Start') }); var io = require('socket.io').listen(server); app.use(session); // session support app.get('/', function (req, res) { req.session.ziom = 1; req.session.save(); console.log('dec'); res.sendfile('./index.html'); }); var http = require('http'); var ios = require('socket.io-express-session'); io.use(ios(session)); io.sockets.on('connection', function(socket){ console.log(parseInt(socket.handshake.session.test)); socket.handshake.session.test =2; socket.handshake.session.save(); console.log(parseInt(socket.handshake.session.test)); }); 

的index.html

 <!DOCTYPE html> <html> <head> </head> <body> <script src="https://cdn.socket.io/socket.io-1.3.5.js"></script> <script> var socket = io(); </script> </body> </html> 

真心希望有所帮助。

我假设你打算使用类似于教程中的引导文件的HTML文件打开socket.io连接(此链接之后的第二个html代码段) ?

随着一个小小的变化,你的代码为我工作,工作意味着你得到

 NaN 2 2 2 

在两个页面刷新的控制台上。

为了得到这个,我创build了相对于index.js文件(上面的代码的一个副本)的boostrap文件在views/socket.html ,并确保这是由快递的应用程序通过将这些行添加到处理程序路线:

 require('fs').readFile('views/socket.html', function (err, data) { res.writeHead(200, {'Content-Type': 'text/html'}); res.write(data, "utf8"); res.end(); }); 

然后访问http://localhost:3000两次。

为了保存会话cookie,这个文件需要由快速应用服务; 以便socket.io连接知道在下次刷新时使用相同的cookie链接到同一会话。