MeteorJS:Restful API适用于Meteor Shell,但不适用于Meteor Methods

时间:2015-10-06 01:36:20

标签: api rest meteor

我正在使用HTTP.call向第三方服务提供商发出Restful API调用。

我在服务器端创建了相关的Meteor方法,并从客户端调用它们。

我对GET电话没有任何问题。但是对于POST和PUT调用,它会在客户端返回内部服务器错误(500),并且在服务器上不允许使用405方法。

当我尝试调试它时,我打开Meteor Shell并在那里调用POST和PUT调用,它们可以工作。但是当我从客户那里调用这些方法时,他们不会这样做。

客户端我有......

Meteor.call('cancelCall', function (err, res) {
  if (err) {
    console.log(err);
  } else {
    console.log(res);
  }
});

服务器端......

Meteor.methods('cancelCall', function () {
 var url = 'http://example.com/some/params/cancel';
 var result = HTTP.call('PUT', url);
 return result;
});

我直接输入Meteor Shell ......

HTTP.call('PUT', 'http://example.com/some/params/cancel');

导致此行为的原因以及如何解决此问题?

非常感谢。

2 个答案:

答案 0 :(得分:0)

在方法中包装这些调用是不必要的,因为可以在客户端上直接调用HTTP.call(和相关方法)。

Docs:呼叫签名如下所示:

  

HTTP.call('PUT',url,[callOptions],[asyncCallback])

在服务器上,您可以省略asyncCallback参数,并且调用只会阻塞直到它有结果。

在客户端上,这不能省略,因为只能进行异步调用。

此外,您没有为PUT(/ POST)方法提供任何数据。这应该在callOptions参数中传递,如下所示:

HTTP.call('PUT', url, {params: {user: userId}}, callbackFunc)

答案 1 :(得分:0)

  

然而,对于POST和PUT调用,它返回内部服务器错误(500)   在客户端和服务器上不允许使用405方法。

当您在服务器端发出POST和PUT请求时,您将收到错误405。这告诉你你正在调用的api不接受POST和PUT请求。

这部分是猜测:

当您通过Meteor.method调用从客户端发出相同的请求时,您的应用服务器正在发出请求,并从远程服务器获取405错误。这会导致服务器将500(内部服务器错误)返回给客户端。