如何使用meteor进行API调用

时间:2013-01-14 14:45:20

标签: javascript json api twitter meteor

好的,这是推特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 () {
    });
}

5 个答案:

答案 0 :(得分:57)

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

As an aside, per the documentation,checkTwitter函数的客户端Meteor.method只是服务器端方法的存根。您需要查看文档,以获得有关服务器端和客户端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
    });
}

答案 1 :(得分:29)

这可能看起来很简陋 - 但默认情况下,您的Meteor项目中不会出现HTTP程序包,并要求您单独安装它。

在命令行上:

  1. Just Meteor:
    me meteor add http

  2. 陨石:
    mrt add http

  3. Meteor HTTP Docs

答案 2 :(得分:6)

客户端上的Meteor.http.get是异步的,因此您需要提供回调函数:

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

答案 3 :(得分:4)

使用Meteor.http.get。根据{{​​3}}:

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

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

答案 4 :(得分:0)

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

var result = HTTP.get(iurl); return result.data.response;

因为我没有将呼叫传递回HTTP.get所以它一直等到我得到回复。希望它有所帮助