2017-11-25 145 views
0

如何在不使用會話和傳遞變量的情況下爲每個用戶聲明獨立的原始變量?不使用會話的每個用戶的Node.js原始變量

我在PHP中對此沒有任何問題,因爲變量對於每個用戶都是原創的,您可以在功能之間共享它們。

<?php 
$original_variable_for_each_user = "foo"; 
function foo() { 
    //it can reach variable 
    console.log(original_variable_for_each_user); 
} 
?> 

但是我不能在Node.js中做到這一點,如果我想共享函數之間的變量。

情況1

var not_original_variable_for_each_user = "foo"; 

app.get('/', function(req, res) { 
    not_original_variable_for_each_user = "foo"; 
    res.sendFile(__dirname + '/index.html'); 
}); 

function foo() { 
    //it can reach variable 
    console.log(not_original_variable_for_each_user); 
} 

情況2

app.get('/', function(req, res) { 
    var original_variable_for_each_user = "foo" 
    res.sendFile(__dirname + '/index.html'); 
}); 

function foo() { 
    //it can not reach original_variable_for_each_user 
    console.log(original_variable_for_each_user); 
} 

我會感謝你的答案。

+0

問題是什麼是什麼呢?當你運行你的例子時會發生什麼,你期望發生什麼? – ext

+0

情況1 - 變量聲明爲公共,所以它可以在其他函數中實現。但是,當您在node.js中將變量聲明爲public時,變量對於每個用戶而言都不是唯一的,情境2 - 變量是唯一的,但不能從其他函數訪問,因此它會引發錯誤。我期望擁有公共變量,這對PHP中的每個用戶都是唯一的。 –

+0

一個變量*每個用戶*(而不僅僅是每個請求/連接)聽起來*就像一個會話變量。 – Bergi

回答

0

而不是依賴全局變量的狀態,作爲函數參數傳遞狀態。

你的第二個例子可以寫成如下:

app.get('/', function(req, res) { 
    var userState = { 
     myVar: "foo", 
    }; 
    foo(userState); // here the state is explicitly being passed into the function 
    res.sendFile(__dirname + '/index.html'); 
}); 

function foo(userState) { 
    console.log(userState.myVar); 
} 
+0

謝謝你的回答。但是有可能在不傳遞變量的情況下做到這一點? –

+0

通過使用會話,請參見例如[express-session](https://github.com/expressjs/session)(假設您使用express,但代碼看起來像是這樣)。 – ext