4

コールバックの接続反復全体でデータを記憶する必要があるノードアプリを作成していcreateServer()ます。データベースやファイルのr/wを含まない簡単な方法はありますか?私は、さまざまな応答ハンドラーにオブジェクトを渡しながら、それぞれのモジュールとメインスクリプトでオブジェクトを作成しようとしましたが、接続ごとにオブジェクトがフラッシュされます。

それが意味すること:

require('http').createServer(function(req,res){
        route(req,res,object);
}).listen(cp=80);

object={variable:0}

function route(req,res,object){
    res.end();
    console.log(object.variable);
    object.variable=Math.floor(Math.random()*100);
}

console.log0この場合、当然のことながらすべての接続がスローされます。モジュール間で利用できるという意味ではなく、のとは異なり永続的なグローバル変数を作成する方法はありますvarか?

4

1 に答える 1

5

Nodeの各モジュールには独自のスコープがあるためvar Foo;、グローバル変数Fooは作成されません。globalモジュール内からオブジェクトを使用します。

アップデート:

require('http').createServer(function(req,res){
        route(req,res,object);
}).listen(cp=8080);

object={variable:0}
global.foo = 'Bar'; // I added this

function route(req,res,object){
    res.end();
    console.log(object.variable);
    console.log("foo = %s", global.foo); // I added this too
    object.variable=Math.floor(Math.random()*100);
}

また、期待どおりに「foo=Bar」もログに記録されます。

于 2012-06-26T00:01:08.533 に答える