2016-11-15 261 views
0

我剛剛開始使用Node,並且遇到了設置變量的問題。在下面的例子中,每個用戶的random值都是一樣的,因爲它是在app start上設置的。設置全局/局部變量

var random = math.Random(); 

app.post('/api/whatever/', function(req, res) { 
    console.log(random); 
}); 

使用局部變量將意味着,每一個崗位請求時的時間隨機變化的值:

app.post('/api/whatever/', function(req, res) { 
    var random = math.Random(); 
    console.log(random); 
}); 

我試圖找出是如何設置的隨機值每個用戶/會話一次(即用戶第一次打電話給/ api /不管)。我有第一個請求後設置的其他配置變量,所以最好只是觸發一個init()函數。但問題是相同的。

回答

0

您的全局變量可以包含一個對象,其中的鍵是會話ID,值是您想要的會話特定信息 - 例如您的隨機數。

獲取會話ID,看到了這個問題:How can I find the session Id when using express/connect and a session store?

+0

你指的是使用express-會議?我昨天嘗試過,但似乎所有請求都有相同的ID,因爲app.use(session(sess))在我的API方法之外(我假設它是在我使用'node app.js'啓動應用程序時設置的,而不是用戶發出請求)我只是用郵差進行測試,但是當我打開兩個選項卡時,會話ID是相同的。 – krazy4code

0

使用express-session模塊:

npm install express-session

下面是一個例子:

... 

var session = require('express-session'); 

app.use(session({secret: '1234567890QWERTY'})); 

app.get('/api/whatever/', function(req, res) { 

    if(req.session.random) { 
    res.send('Your random key is: ' + req.session.random); 

    } else { 
    req.session.random = Math.random(); 
    // Set anything else you want in req.session ... 
    } 

}); 
+0

我今天測試了一段時間。不管我的方法如何,這個問題似乎都是一樣的。全局變量不起作用,因爲所有用戶都具有相同的值。本地變量不起作用,因爲每次他們發出新的通知後,值都會更新。即使Express-Session也會生成一個新的ID。 – krazy4code

+0

我不明白。快速會話基於每個用戶特定的cookie。每個用戶都有自己的會話對象,您可以在其中設置特定的用戶屬性。它不再是全局或局部變量。你能用你測試過的代碼更新你的問題嗎?通過迄今爲止嘗試過的方法更新問題非常有用。 – karliwson

+0

我的錯誤。你的例子完美地工作。我不明白的唯一部分是我如何從一個超出上述get方法範圍的函數獲取和設置會話cookie值。例如,如果我在app.get中調用函數foo(someparam){},並嘗試從該函數內訪問會話cookie。 – krazy4code