nodejs with express:每个视图的变量

时间:2017-06-11 18:23:10

标签: javascript node.js express ejs

我正在为基于网络的游戏编码,我想在每个视图中分享变量。

每个用户都创建了自己的种族,每个种族都有很多变量。 即 - 商品{money,energy,...} 行星{拥有,建造,...}

我希望在用户登录后在每个页面上显示这些值。每次用户执行操作时,这些值都会发生变化。

对于我没有使用帮助模块

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

我希望避免在每条路线上调用此功能,因为这些只是商品的价值。

你能给我一些建议怎么做吗?

我想在登录后的每个页面上使用它的部分内容。有没有办法把它放在一边?对于我想特别展示的其他页面,我可以在路由器中调用此功能。

1 个答案:

答案 0 :(得分:0)

您可以使用 express-session

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

因此,在第一次请求时,请求数据库并缓存数据。在第二个请求中,它获取存储的数据而无需从db重新加载。