2016-03-03 119 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