我正在为基于网络的游戏编码,我想在每个视图中分享变量。
每个用户都创建了自己的种族,每个种族都有很多变量。 即 - 商品{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);
}
});
}
我希望避免在每条路线上调用此功能,因为这些只是商品的价值。
你能给我一些建议怎么做吗?
我想在登录后的每个页面上使用它的部分内容。有没有办法把它放在一边?对于我想特别展示的其他页面,我可以在路由器中调用此功能。
答案 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重新加载。