如何在Meteor中从客户端到服务器进行简单的http请求

时间:2015-12-04 16:57:07

标签: javascript http meteor

我第一次使用Meteor,我正在尝试在方法中进行简单的http调用,这样我就可以从客户端调用此方法。

问题是这个异步调用它会继续运行,即使我把它放在一个包装器中。

客户方:

Meteor.call('getToken', function(error, results) {
      console.log('entered');

      if(error) {
        console.log(error);
      } else {
        console.log(results);
      }
    });

服务器端

Meteor.methods({
    getToken: function(){

        // App url
        var appUrl = 'myAppUrl';

        // Key credentials
        var apiKey = 'mykey';
        var apiSecret = 'mySecret';

        function asyncCall(){
            Meteor.http.call(
                'POST',
                appUrl,
                {
                    data: { 
                        key: apiKey, 
                        secret: apiSecret
                    }
                }, function (err, res) {
                    if(err){
                      return err;
                    } else {
                      return res;
                    }
                }
            );
        }

        var syncCall = Meteor.wrapAsync(asyncCall);

        // now you can return the result to client.
        return syncCall; 
    } 
});

我总是得到一个不明确的回报。 如果我在http.post调用中记录响应,我正在做出正确的响应。 如果我尝试记录syncCall,我什么也得不到。

我非常感谢你提供任何帮助。

1 个答案:

答案 0 :(得分:3)

在这种情况下,您应该使用HTTP.post的同步版本。尝试这样的东西:

Meteor.methods({
  getToken: function() {
    var appUrl = 'myAppUrl';
    var data = {apiKey: 'mykey', apiSecret: 'mySecret'};
    try {
      var result = HTTP.post(appUrl, {data: data});
      return result;
    } catch (err) {
      return err;
    }
  } 
});

而不是返回err我建议确定抛出了什么类型的错误,然后只是throw new Meteor.Error(...),以便客户端可以将错误视为其第一个回调参数。