Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor 传递调用方法的结果时出现异常_Meteor_Nitrousio - Fatal编程技术网

Meteor 传递调用方法的结果时出现异常

Meteor 传递调用方法的结果时出现异常,meteor,nitrousio,Meteor,Nitrousio,我一直在用meteor测试http调用,我使用了nitrous(因为我在周末无法访问我的开发人员笔记本电脑),它工作得很好。 但当我尝试从本地pc运行时,它返回: 传递调用“getMatch”的结果时出现异常:TypeError: 无法读取未定义的属性“duration” 你知道原因是什么吗? 方法定义: Dota = {}; Dota.getMatch = function() { if (!Meteor.settings.steamToken) throw new Mete

我一直在用meteor测试http调用,我使用了nitrous(因为我在周末无法访问我的开发人员笔记本电脑),它工作得很好。 但当我尝试从本地pc运行时,它返回:

传递调用“getMatch”的结果时出现异常:TypeError: 无法读取未定义的属性“duration”

你知道原因是什么吗? 方法定义:

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

找到解决办法后,我改变了

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

到server/server.js(我在packages/dota/dota.js中有它),现在它可以工作了!谢谢@user3374348的帮助

访问名为
duration
的属性的唯一位置是方法回调中的
result.duration
。因此,
result
必须是未定义的,即该方法返回未定义的。如果将
console.log(JSON.stringify(matchResponse.data))
添加到您的方法中,您会得到什么?似乎该方法从未被调用过(console.log没有显示)。我从一个包中声明了这个方法,也许这就是问题所在?奇怪的是,它在NitrousID上工作正常。你检查服务器日志和客户端日志吗?