我在服务器上使用HTTP方法调用一个简单的google api。看来我得到了一个json对象,但客户端上的回调似乎返回了一个未定义的对象。
我的猜测是某种程度上结果是没有及时回调。有点困惑。
完整代码:
if Meteor.isClient
Meteor.startup () ->
console.log "Client Started."
Meteor.call("getGeocode", 94582, (error, result) ->
console.log "GeoCode returned to client, #{result}."
Session.set("latitude", result))
Template.results.latitude = () ->
Session.get("latitude")
Template.results.longitude = () ->
"longitude"
if Meteor.isServer
Meteor.startup () ->
console.log "Server Started"
Meteor.methods
"getGeocode": (zipCode) ->
result = HTTP.call("GET", "http://maps.googleapis.com/maps/api/geocode/json?address=#{zipCode}&sensor=false")
console.log "Geocode called, returning #{result}."
答案 0 :(得分:1)
您的getGeocode
方法返回undefined
因为CoffeeScript会自动返回函数中的结果最后一个语句,在本例中为console.log
。
我不认为result
真的是你想要的。我建议您在util
部分的开头添加isServer
,如下所示:
if Meteor.isServer
util = Npm.require 'util'
现在,您可以致电console.log util.inspect result, {depth: null}
查看其内容。我想你可能真正希望返回的是result.data.results[0]
。您的代码可能类似于:
if Meteor.isClient
Meteor.startup () ->
console.log "Client Started."
Meteor.call("getGeocode", 94582, (error, result) ->
Session.set("latitude", result.geometry.location.lat))
Template.results.latitude = () ->
Session.get("latitude")
Template.results.longitude = () ->
"longitude"
if Meteor.isServer
util = Npm.require 'util'
Meteor.startup () ->
console.log "Server Started"
Meteor.methods
"getGeocode": (zipCode) ->
result = HTTP.call("GET", "http://maps.googleapis.com/maps/api/geocode/json?address=#{zipCode}&sensor=false")
geoData = result.data.results[0]
console.log util.inspect geoData, {depth: null}
geoData