node.js setInterval不改变会话变量
问题描述:
我是JavaScript新手,一直在用node.js中的函数setInterval和会话挣扎。node.js setInterval不改变会话变量
我有这样的代码:
var express = require('express');
var app = express();
var session = require('express-session')({
secret: 'shhh_very_secret',
resave: true,
saveUninitialized: true,
cookie: {
secure: false
}
});
app.use(session);
app.get('/', function(req, res, next) {
if (!req.session.visited) {
console.log('First visit!');
req.session.visited = true;
req.session.state = 'default';
setInterval(function() {
req.session.state = "changed";
}, 3000);
} else {
console.log('Page refreshed!');
console.log('This should output "changed" but it does not');
console.log(req.session.state);
}
res.send('Hi!');
});
app.listen(3000, function() {
console.log('Example app listening on port 3000!');
});
可有人请我的磨片的req.session.state是默认我刷新页面后解释一下吗?会话运行良好,否则我甚至不会打印出其他内容{}。
答
- 您传递给
get()
运行的匿名函数。 - ,则触发间隔
- 你叫
res.send()
和发送 - 3秒后的时间间隔完成响应并更改状态
......到那个时候请求已经完成了。
如果您想要修改会话中的数据,请在完成特定请求的处理之前执行此操作。
但这是目的。在res.send()之后更改数据。但是当我在10秒后发出另一个请求时,我应该看到已经更改了数据。要么?我很抱歉,如果我是愚蠢的,但我仍然不明白。 – Matumizuro
@Matumizuro我认为一旦请求完成,会话状态就立即被持久化,所以你正在改变没有人感兴趣的会话变量的内存副本。 –
@Joachim Isaksson哦,我明白了。我能做些什么来每隔X秒更改会话数据而不依赖于用户的请求? – Matumizuro