2017-06-11 4 views
0

私はWebベースのゲームをコーディングしています。私はすべてのビュー内で変数を共有したいと思います。expressとnodejs:すべてのビューの変数

すべてのユーザーは自分のレースを作成しており、すべてのレースには多くの変数があります。 すなわち - コモディティ{お金、エネルギー、...} 惑星{所有し、構築され、...}

私は、ユーザーがログインした後、すべてのページにこれらの値を表示したいこれらの値は、すべての変更しようとしています。ユーザーがアクションを実行する時間。ノー用

私はこれらの商品のための唯一の値ですと、すべてのルートでこの関数を呼び出す避けたいのですが、ヘルパーモジュールに

dbValues.commodities = function(userId, callback){ 
    Race.findOne({"owner.id" : userId}, function(err, race){ 
     if(err){ 
      console.log(err) 
     } else { 
      var money = race.commodities.money; 
      var energy = race.commodities.energy; 
      var metals = race.commodities.metals; 
      var techs = race.commodities.techs; 
      var soldiers = race.commodities.soldiers; 
      callback(money, energy, metals, techs, soldiers); 
     } 
    }); 
} 

を使用しています。

どうすればいいですか?

ログイン後、すべてのページで同じものが部分的に使用したいです。部分的に配置する方法はありますか?他のページについては、特別に私はルータでこの関数を呼び出すことができますそれらを表示したい。

答えて

0

あなたは急行セッションを使用することができます。

var app=require("express")(); 
var sess=require("express-session"); 
app.use(sess({secret:"somerandom"}); 

今すぐすべてのExpress.requestはウィッヒは、ユーザ毎の持続的で、セッションのプロパティを持っています

app.get("/",function(req,res){ 
    if(!req.session){ 
    Race.findOne({"owner.id" : userId}, function(err, race){ 
    if(err){ 
     console.log(err) 
    } else { 
     req.session= race.commodities; 
     res.end(race.commodities.money); 
    } 
    }); 
    }else{ 
    res.end(req.session.commodities.money); 
} 

だから、最初の要求でデータベースが要求され、データがキャッシュされます。 2番目の要求では、dbからリロードせずに格納されたデータを取得します。

関連する問題