2017-06-11 71 views
0

我正在編寫一個基於web的遊戲,我想在每個視圖中共享變量。nodejs with express:每個視圖的變量

每個用戶都創建了自己的種族,每個種族都有很多變量。 即 - 商品{錢,能源,...} 行星{擁有,建造,...}

我想在用戶登錄後在每個頁面上顯示這些值。這些值將會每隔用戶執行操作的時間。

因爲沒有我使用的輔助模塊

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); 
} 

因此,在第一次請求,數據庫被請求並且數據被緩存。在第二個請求中,它獲取存儲的數據而不從數據庫重新加載。