2015-12-04 26 views
0

我第一次使用流星,我试图在一个方法中有一个简单的http调用,所以我可以从客户端调用这个方法。如何在流星从客户端到服务器做一个简单的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,我什么也得不到。

我非常感谢这方面的帮助。

回答

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(...)所以客户端可以看到错误作为第一个回调参数。

+0

谢谢@David! –

相关问题