2016-03-03 120 views
-1

我是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是默认我刷新页面后解释一下吗?会话运行良好,否则我甚至不会打印出其他内容{}。

回答

0
  1. 您传递给get()运行的匿名函数。
  2. ,则触发间隔
  3. 你叫res.send()和发送
  4. 3秒后的时间间隔完成响应并更改状态

......到那个时候请求已经完成了。

如果您想要修改会话中的数据,请在完成特定请求的处理之前执行此操作。

+0

但这是目的。在res.send()之后更改数据。但是当我在10秒后发出另一个请求时,我应该看到已经更改了数据。要么?我很抱歉,如果我是愚蠢的,但我仍然不明白。 – Matumizuro

+0

@Matumizuro我认为一旦请求完成,会话状态就立即被持久化,所以你正在改变没有人感兴趣的会话变量的内存副本。 –

+0

@Joachim Isaksson哦,我明白了。我能做些什么来每隔X秒更改会话数据而不依赖于用户的请求? – Matumizuro