2017-11-25 2 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-変数はpublicとして宣言されているため、他の関数に到達することができます。しかし、あなたはNode.jsの中でパブリックとして変数を宣言する場合、変数はユーザーごとに固有のものではないが、状況2 - 変数はユニークですが、それはエラーがスローされますので、他の機能から到達可能ではありません。私はPHPのように各ユーザに固有の公開変数を持つことを期待しています。 –

+0

変数*ユーザー*(だけではなく、要求/接続毎)に聞こえるあたり*正確に*私にセッション変数のように。 – Bergi

答えて

0

グローバル変数をstateに頼る代わりに、stateを関数の引数として渡します。正確に質問です

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

セッションを使用することにより、[表現-セッション](https://github.com/expressjs/session)(あなたは速達を使用していると仮定すると、それがあるようなコードに見える)インスタンスを参照。 – ext

関連する問題