2013-11-08 2 views
0

Я вызываю простой google api, используя HTTP-метод на сервере. Кажется, я возвращаю объект json, но обратный вызов на клиенте, похоже, возвращает неопределенный объект.Метод Обратный звонок Возврат Неопределенный [CoffeeScript]

Моя догадка почему-то не доходит до обратного вызова во времени. Немного смущен.

Полный код здесь:

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}." 

ответ

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 
+0

Спасибо! МНОГО очиститель. Отличные советы. Onward ... – ppedrazzi

Смежные вопросы