如何使用流星进行 API 调用

Posted

技术标签:

【中文标题】如何使用流星进行 API 调用【英文标题】:How to make an API call using meteor 【发布时间】:2012-12-28 12:58:39 【问题描述】:

好的,这里是 twitter API,

http://search.twitter.com/search.atom?q=perkytweets

谁能给我任何关于如何使用Meteor调用此API或链接的提示

更新:

这是我尝试过的代码,但没有显示任何响应

if (Meteor.isClient) 
    Template.hello.greeting = function () 
        return "Welcome to HelloWorld";
    ;

    Template.hello.events(
        'click input' : function () 
            checkTwitter();
        
    );

    Meteor.methods(checkTwitter: function () 
        this.unblock();
        var result = Meteor.http.call("GET", "http://search.twitter.com/search.atom?q=perkytweets");
        alert(result.statusCode);
    );


if (Meteor.isServer) 
    Meteor.startup(function () 
    );

【问题讨论】:

我快速查看了文档,我认为查看 docs.meteor.com/#meteor_http_get 会很有用,虽然我之前没有使用过流星,所以我不太确定语法,但现在看看给你... HTTP.get() 的文档现在位于 docs.meteor.com/#/full/http_get 【参考方案1】:

您正在将您的 checkTwitter Meteor.method inside 定义为客户端范围的块。因为您不能从客户端调用跨域(除非使用 jsonp),所以您必须将此块放在 Meteor.isServer 块中。

As an aside, per the documentation,您的 checkTwitter 函数的客户端 Meteor.method 只是服务器端方法的 stub。您需要查看文档以获取有关服务器端和客户端 Meteor.methods 如何协同工作的完整说明。

这是一个 http 调用的工作示例:

if (Meteor.isServer) 
    Meteor.methods(
        checkTwitter: function () 
            this.unblock();
            return Meteor.http.call("GET", "http://search.twitter.com/search.json?q=perkytweets");
        
    );


//invoke the server method
if (Meteor.isClient) 
    Meteor.call("checkTwitter", function(error, results) 
        console.log(results.content); //results.data should be a JSON object
    );

【讨论】:

它实际上返回的是 xml 而不是 json,所以在尝试发出警报时它显示未定义 search.twitter.com/search.json?q=perkytweets(上面编辑过)——更重要的是,这行得通吗? 其实我也尝试过更新你的答案,我得到了回应,但它是 [object][object]。是否可以将其转换为字符串。我的意思是普通的 javascript我们可以使用 jquery JSON.stringify 将 json 转换为字符串,但是如果我尝试 dat,我会得到 "error": 我刚刚运行了代码,它看起来不错。 results.content 应该给你一个字符串。不过,我正在编辑我的答案,因为选项 1 不会奏效——你不能做跨域 ajax 客户端(除非利用 jsonp,但我不想让事情复杂化)。 对于任何回想起来阅读此内容的人也请注意:您需要将此异步调用的响应作为反应变量提供,例如通过将其存储到 Session 变量中,然后将其打印在模板中(并在异步调用完成时自动更新)。【参考方案2】:

这可能看起来很初级 - 但 HTTP 包默认情况下不会出现在您的 Meteor 项目中,并且需要您按点安装它。

在命令行中:

    只是流星:流星添加http

    陨石:mrt add http

Meteor HTTP Docs

【讨论】:

【参考方案3】:

客户端的 Meteor.http.get 是异步的,所以你需要提供一个回调函数:

Meteor.http.call("GET",url,function(error,result)
     console.log(result.statusCode);
);

【讨论】:

【参考方案4】:

使用Meteor.http.get。根据docs:

Meteor.http.get(url, [options], [asyncCallback]) Anywhere
Send an HTTP GET request. Equivalent to Meteor.http.call("GET", ...).

文档实际上包含了一些使用 Twitter 的示例,因此您应该能够开始使用它们。

【讨论】:

感谢 dat..我刚刚更新了我的代码,但它仍然无法正常工作。显示没有输出【参考方案5】:

在服务器端,如果您提供对 http.get 的回调,它将是异步调用,所以我对客户端上未定义返回的解决方案是

var 结果 = HTTP.get(iurl); 返回结果.data.response;

因为我没有将调用回传给 HTTP.get,所以它一直等到我得到响应。希望对你有帮助

【讨论】:

以上是关于如何使用流星进行 API 调用的主要内容,如果未能解决你的问题,请参考以下文章

您将如何将订阅管理器与流星的模板订阅一起使用?

你如何进行流星测试?

如何使用流星[关闭]

如何在流星每隔“X”分钟进行一次jenkins调用以检索作业详细信息?

在流星应用程序中如何在cordova config.xml中添加orgin = *?

将引导程序添加到流星包