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链接到同一会话。