我有使用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));
});
答案 0 :(得分:2)
我不理解这个错误,因为我复制了你的代码,一切都正常!
*我无法看到您的所有代码/项目,我不知道您是否有while (tmax--){std::cout << tmax << std::endl;}
文件与节点服务器启动connexion事件。我有这个文件,其中包含最少的测试代码。
我的app.js更改为index.html
请参阅下面的所有代码进行比较。
<强> app.js 强>
res.sendfile('./index.html');
<强>的index.html 强>
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));
});
衷心希望有所帮助。
答案 1 :(得分:1)
我假设您尝试使用类似于bootstrap file in the tutorial (second html snippet after this link)的HTML文件打开socket.io连接?
只需稍作修改,您的代码就能为我工作,工作意味着您可以获得
NaN
2
2
2
控制台上的有两页刷新。
为了实现这一点,我在index.js
创建了相对于views/socket.html
文件(上面代码的副本)的boostrap文件,并通过添加这些文件来确保这是由快递应用程序提供的行到&#39; /&#39;的处理程序路线:
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
。
此文件需要由Express应用程序提供,以便存储会话cookie;这样socket.io连接就知道在下次刷新时使用相同的cookie链接到同一个会话。