0

我在服务器上使用 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}."
4

1 回答 1

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
于 2013-11-08T23:10:10.613 回答