所以我试图在我的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文件,还是我需要在新哈希中调整它?回调意味着什么?有人可以举个例子吗?
答案 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