Meteor.http.call(调用URL API)

时间:2014-05-18 12:23:53

标签: json meteor callback get meteor-helper

所以我试图在我的Meteor应用程序中调用圣经诗歌API。我使用name="display"制作了一个模板,模板中有一个简单的{{checkitout}}

然后,对于模板,我尝试在相应的帮助器中进行调用。它看起来像这样(在coffeescript中,但Javascript读者也应该理解):

@Template.display.helpers
    checkitout:->
        result = Meteor.http.call("GET","http://labs.bible.org/api/passage=john%203:2&type=json")
        console.log(result)

URL是圣经经文的JSON,但问题是,Meteor.http.call需要第三个参数,一个"回调" (因为这是在客户端文件夹中)。我阅读了一些文档和示例,并且不知道它意味着什么。

另外,如果我这样调用它,结果恰好是JSON文件,还是我需要在新哈希中调整它?回调意味着什么?有人可以举个例子吗?

2 个答案:

答案 0 :(得分:1)

在客户端上,如您所说,需要回调。因此,您可以执行此操作来查询API并显示JSON结果:

Template.Display.helpers
  checkItOut: ->
     Meteor.http.get 'https://graph.facebook.com/facebook', (error, result) ->
       if not error
         console.log result  # display the the open graph result

注1 :要使用这些功能,您需要使用$ meteor add http将HTTP包添加到项目中。您可以找到更多信息in the documentation

注意2 :在您的情况下,由于Access-Control-Allow-Origin政策,您无法在客户端进行API调用。因此,解决方案是使用方法并在服务器端调用。

# Client-side
Template.Display.helpers
  checkItOut: ->
    Meteor.call 'getBibleText', (error, result) ->
      if not error
        console.log result


# Server-side (server directory)
Meteor.methods
  'getBibleText': ->
    result = HTTP.get 'http://labs.bible.org/api/?passage=john%203:2&type=xml'
    return result

答案 1 :(得分:1)

由于帮助程序是同步的而API调用不是,因此您需要将调用结果存储在一个反应​​变量中并从帮助程序返回它:

verse       = "Loading..."
verseLoaded = false
verseDep    = new Deps.Dependency()

Template.Display.checkItOut = ->
  verseDep.depend()
  unless verseLoaded
    verseLoaded = true
    Meteor.http.get "...", (error, result) ->
      verse = "..."
      verseDep.changed()
  verse