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

CoffeeScriptは関数の最後のステートメント (この場合は ) を自動的に返すため、getGeocodeメソッドが返されます。undefinedconsole.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 に答える