node.js setInterval不更改会话变量

时间:2016-03-03 15:36:56

标签: javascript node.js setinterval

我是javascript的新手,并且一直在使用函数setInterval和node.js中的会话。

我有这段代码:

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是默认的吗?会话运作良好,否则我甚至不会打印出其他内部{}。

1 个答案:

答案 0 :(得分:0)

  1. 您传递给get()的匿名函数会运行。
  2. 触发间隔
  3. 您致电res.send()并发送回复
  4. 3秒后,间隔完成,您更改状态
  5. ...到那时请求已经完成了。

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