2015-03-09 1 views
2

Я тестировал на http-звонках с метеор, я использовал азот (потому что у меня не было доступа к моему ноутбуку в выходные дни), и он работал нормально. Но когда я пытался бежать от моего локального ПК возвращается:Исключение при доставке результата вызова метода

Exception in delivering result of invoking 'getMatch': TypeError: Cannot read property 'duration' of undefined.

Любые идеи, что может быть причиной? Определение Метод:

Dota = {}; 

Dota.getMatch = function() { 
    if (!Meteor.settings.steamToken) 
    throw new Meteor.Error(500, 'Enter a valid Steam Token in Meteor.settings'); 

    var matchResponse = Meteor.http.get(
     "https://api.steampowered.com/IDOTA2Match_570/GetMatchDetails/V001/?", 
     { 
      params:{ 
       "match_id": "1305454585", 
       "key": Meteor.settings.steamToken 
      } 
     } 
    ); 

    if (matchResponse.statusCode === 200) { 
     return matchResponse.data.result 
    } 
    else { 
     throw new Meteor.Error(500, "getMatch failed with error: "+matchResponse.statusCode); 
    } 
} 

Meteor.methods({ 
    'getMatch': function(){ 
     return Dota.getMatch(); 
    } 
}) 

Вызов метода:

Meteor.call('getMatch', function(error, result){ 
    var duration = numeral(result.duration).format('00:00:00'); 
    Session.set('duration', duration); 

    var winner = Meteor.myFunctions.getWinner(result.radiant_win); 
    Session.set('winner', winner); 
}); 

Template.layout.helpers({ 
    winner: function() { 
     return Session.get('winner'); 
    }, 
    duration: function() { 
     return Session.get('duration'); 
    } 
}); 
+0

Единственным местом, где вы получаете доступ к свойству под названием 'duration', является' result.duration' в обратном вызове метода. Поэтому 'result' должен быть неопределенным, т. Е. Метод возвращает undefined. Что вы получите, если добавить свой метод console.log (JSON.stringify (matchResponse.data))? – user3374348

+0

Кажется, что метод никогда не вызван (консоль.log не отображалась). Я объявил, что метод из пакета, может быть, это проблема? странно, что он отлично работает на азоте. – akrz

+0

Проверяли ли вы журналы сервера, а также журналы клиентов? – user3374348

ответ

1

Найдено решение, я изменил расположение

Meteor.methods({ 
    'getMatch': function(){ 
     return Dota.getMatch(); 
    } 
}) 

к серверу/server.js (я имел это в пакетах /dota/dota.js), и теперь это работает! Спасибо @ user3374348 за помощь!