我在使用Meteor时遇到错误。我称之为Method.method。
Template.WelcomeTemplate.events({
'click #btn-findgame': function(e) {
e.preventDefault();
console.log('clicked find game button');
Meteor.call('allocateGame', function(error, id) {
if (error) {
alert(error.reason);
} if (id) {
Router.go('gameRoom', {_id: id})
}
})
}
})
使用我的方法,我检查是否有可用的房间,在没有其他方式加入时创建一个房间。并返回这个房间的ID。
Meteor.methods({
allocateGame: function () {
console.log('allocateGame method called')
var user = Meteor.user();
// find game where one player is in the room
var gameWaiting = Games.findOne({players: {$size: 1}})
if (!gameWaiting) {
console.log('no game available, create a new one');
var newGameId = Games.insert({players: [user._id], active: false, finished: false});
GameDetails.insert({gameId: newGameId, gameData: []});
return newGameId
} else {
if (_.contains(gameWaiting.players, user._id)) {
console.log('Cannot play against yourself sir')
} else {
console.log('Joining game');
Games.update({_id: gameWaiting._id}, {
$set: {active: true},
$push: {players: user._id}
});
return gameWaiting._id;
}
};
}
})
我的路由器:
Router.map(function () {
this.route('welcome', {
path: '/',
controller: WelcomeController})
this.route('gameRoom', {
path: '/game/_:id'
})
});
我收到的错误是:
Exception in delivering result of invoking 'allocateGame': TypeError: Cannot read property 'charAt' of null
at Object.IronLocation.set (http://localhost:3000/packages/iron-router.js?e9fac8016598ea034d4f30de5f0d356a9a24b6c5:1293:12)
事实上,如果我没有返回ID,路由将正常继续。但是,当我在WelcomeTemplate中返回ID时,将发生错误。
编辑:
即使我的MongoDB正在更新我的MiniMongo DB也是空的。同步一定存在问题。知道在哪里看?
答案 0 :(得分:1)
在路线中,您将路径设置为'/game/_:id'
,即名称为id
的参数。在致电Router.go
时,您传递的名称为_id
的参数。
不知道这是否能解决您的问题,但这是一个错误。
答案 1 :(得分:1)
这种尴尬考虑到我花了多少时间来解决这个问题。错误是由于我的routers.js
中的错误而创建的 this.route('gameRoom', {
path: '/game/_:id'
})
应该是:
this.route('gameRoom', {
path: '/game/:_id'
})
快乐的编码。