目前,我使用内置的meteor http方法(请参阅http://docs.meteor.com/#http)在我的客户端和服务器上发出http调用。
但是,我遇到了两个问题:
这些只是流星的限制,还是有办法让两者都能使用Meteor?
我知道我可以在客户端进行jquery,并且必须有一个服务器端解决方案同时支持这两个,但我更喜欢在这里坚持使用流星代码。
答案 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
的序列化数组字符串?