2

所以我试图在我的 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 文件,还是我需要将它放入新的哈希中?回调是什么意思?有人可以给我一个例子吗?

4

2 回答 2

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
于 2014-05-18T22:09:25.863 回答
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:要使用这些功能,您需要将 HTTP 包添加到您的项目中$ meteor add http您可以在文档中找到更多信息。

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

# 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
于 2014-05-18T14:46:32.020 回答