2014-05-16 2 views
1

유성을 사용하는 중에 오류가 발생했습니다. Method.method를 호출합니다. 사용할 수있는 공간은 별도로 가입하지 않을 경우 하나를 만들 수있는 경우 내 방법으로Meteor.methods를 호출 한 후 라우터에 결과를 전달할 수 없습니다.

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

})

, 나는 확인한다. 그리고이 방의 신분증을 돌려 보내십시오.

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가 비어 업데이트하고 생각했다. 동기화에 문제가 있어야합니다. 어떤 생각을 볼 것인가?

답변

1

경로에서 경로를 '/game/_:id', 즉 id 인 매개 변수로 설정합니다. Router.go으로 전화하면 _id이라는 매개 변수를 전달합니다.

이 방법으로 문제가 해결되는지는 모르지만 오류입니다.

+1

참고 : 경로는 "/ game/: _ id"이어야합니다. –

+0

고마워,하지만 그건 문제가 아니야, Iron Router가 처리 할 마법 같은거야. 내 miniMongo 데이터베이스가 동기화되지 않는 것처럼 보입니다. – swennemen

+0

감사합니다. Hubert OG. 나는 당신의 답을 간과했는데, 그것은/game/_ : id 대신에/game/: _id 일 것이다. 나는 이것을 발견하기 전에 거의 모든 프로그램을 재 작성했다 : D – swennemen

1

이런 문제를 해결하기 위해 내가 얼마나 많은 시간을 할애했는지를 고려해 보면 당황 스럽다. 이 오류는

this.route('gameRoom', { 
     path: '/game/_:id' 
    }) 

될해야 내 routers.js 오류로 인해 생성 :

this.route('gameRoom', { 
     path: '/game/:_id' 
    }) 

해피 코딩.