【问题标题】:Meteor http calls limitationsMeteor http 调用限制
【发布时间】:2013-12-30 20:49:08
【问题描述】:

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

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

  • 是否可以取消请求?
  • 是否可以有多个查询参数共享同一个键?

这些仅仅是 Meteor 的限制,还是有办法使用 Meteor 让两者都工作?

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

【问题讨论】:

    标签: http meteor


    【解决方案1】:

    “是否可以取消请求?”

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

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

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

    Session.set("stopHTTP", true);
    

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

    请注意,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 的序列化数组字符串?

    【讨论】:

    • 谢谢,这帮助我想出了一个解决方案。关于取消请求:我确实在考虑为此使用会话变量。问题是,我可以从同一个方法发出多个请求,所以我必须为每个请求分配 ID(有点丑陋的解决方法)。我可以看到 GET 工作。对于帖子,我认为唯一的解决方案是设置流星调用的内容值(本质上是查询字符串)。我可能会使用 jqueries 参数解析器(支持重复键)生成内容
    猜你喜欢
    • 2016-05-23
    • 2013-02-14
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    相关资源
    最近更新 更多