Meteor http调用限制

时间:2013-12-30 20:49:09

标签: http meteor

目前,我使用内置的meteor http方法(请参阅http://docs.meteor.com/#http)在我的客户端和服务器上发出http调用。

但是,我遇到了两个问题:

  • 是否可以取消请求?
  • 是否可以有多个共享相同密钥的查询参数?

这些只是流星的限制,还是有办法让两者都能使用Meteor?

我知道我可以在客户端进行jquery,并且必须有一个服务器端解决方案同时支持这两个,但我更喜欢在这里坚持使用流星代码。

1 个答案:

答案 0 :(得分:2)

  

“是否可以取消请求?”

HTTP.call()似乎没有返回我们可以调用类似stop()方法的对象。也许解决方案是阻止基于Session变量执行回调?

HTTP.call("GET", url, function(error, result) {
  if (!Session.get("stopHTTP")) {
    // Callback code here
  }
});

然后,当您到达要取消请求的位置时,请执行以下操作:

Session.set("stopHTTP", true);

在服务器上,您可以使用environment variable而不是Session

请注意,HTTP.call()选项对象确实接受timeout键,因此,如果您只是担心请求永远不会超时,则可以将其设置为您想要的毫秒整数。

  

“是否可以有多个共享相同密钥的查询参数?”

是的,这似乎是可能的。这是我用过的简单测试:

流星代码:

HTTP.call("GET", "http://localhost:1337", {
  query: "id=foo&id=bar"
}, function(error, result) {
  // ...
});

单独的Node.js服务器:(只是Node.js主页上的基本示例,带有console.log行,用查询字符串输出请求URL)

var http = require('http');
http.createServer(function(req, res) {
  console.log(req.url);  // Here I log the request URL, with the query string
  res.writeHead(200, {
    'Content-Type': 'text/plain'
  });
  res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

运行Meteor服务器时,Node.js服务器已记录:

/?id=foo&id=bar

当然,这仅适用于GET URL查询参数。如果您需要为POST参数执行此操作,也许您可​​以将单独的值存储为EJSON.stringify的序列化数组字符串?