我正在使用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');
导致此行为的原因以及如何解决此问题?
非常感谢。
答案 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(内部服务器错误)返回给客户端。