【发布时间】:2017-07-24 05:51:49
【问题描述】:
我正在制作一个需要玩家大厅但没有帐户的游戏。有点像游戏,Spyfall。我正在使用 Meteor Sessions 来了解哪个玩家加入了大厅,以便我可以为该特定玩家返回正确的数据。我有一个 join.js 组件,用户在其中输入大厅访问代码和用户名。该组件还将用户重定向到大厅。 Join.js 位于路径 /join 处,而大厅位于路径 /:lobby 处。这是 join.js 的 handleSubmit 方法,它接受用户输入并将其放入玩家集合中:
handleSubmit(event) {
event.preventDefault();
var party = Players.findOne({code: this.refs.code.value});
if(typeof party !== 'undefined') {
Meteor.call('players.insert', this.refs.code.value, this.refs.name.value);
var playerId = Players.findOne({"name": this.refs.name.value})._id;
Meteor.call('players.current', playerId);
location.href = "/" + this.refs.code.value;
} else {
document.getElementById("error").innerHTML = 'Please enter a valid party code';
}
我正在使用 player.js 集合中 Meteor.methods 中的 Sessions 来获取当前用户。
import { Mongo } from 'meteor/mongo';
import { Session } from 'meteor/session';
Meteor.methods({
'players.insert': function(code, name) {
console.log('adding player: ', name , code);
Players.insert({code: code, name: name});
},
'players.updateAll': function(ids, characters, banners, countries, ancestors) {
for (var i = 0; i < characters.length; i++){
Players.update({_id: ids[i]}, {$set: {character: characters[i], banner: banners[i], country: countries[i], ancestor: ancestors[i]},});
}
},
'players.current': function(playerId) {
Session.set("currentPlayer", playerId);
console.log(Session.get("currentPlayer"));
},
'players.getCurrent': function() {
return Session.get("currentPlayer");
}
});
export const Players = new Mongo.Collection('players');
'players.current' 方法中的 console.log 返回正确的玩家 ID,但是一旦页面重定向到 /:lobby,players.getCurrent 返回未定义。我希望 players.getCurrent 返回与 console.log 返回相同的值。我该如何解决这个问题?这是在 lobby.js 中获取当前玩家 id 的函数:
getCurrentPlayerId() {
return Meteor.call('players.getCurrent');
}
【问题讨论】:
标签: javascript mongodb session meteor