2017-11-25 143 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