2013-10-01 5 views
0

Я пытаюсь сделать HTTP вызов на удаленный сервер в моем приложенииMeteor.call возвращение неопределенного от сервера к клиенту

У меня есть пакет с функцией, которая обрабатывает фактический вызов, а затем преобразует XML в JSON

myPackage = { 
baseUrl: "http://12.34.56.78:8080/api", 

getBatchList: function() { 
    var url = this.baseUrl + "/batchList.xml"; 

    HTTP.get(url, {auth: "user:pass"}, function(err, res) { 
     if (!err) { 
      console.log(res); 
      xml2js.parseStringSync(res.content, function(error, result){ 
       if (!error) { 
        console.log(result); //the result is displayed 
        return result; 
       }; 
      }); 
     }; 
    }); 
} 
} 

Я тогда Meteor.method объявил на сервере, так что я могу вызвать функцию от клиента, так как MyPackage доступна только на сервере (который он должен быть, так как его изготовление HTTP звонки вне домена которые я не могу сделать с клиентом).

if (Meteor.isServer) { 
Meteor.methods({ 
    getBatchList: function() { 
     myPackage.getBatchList(function(error, result) { 
      if (!error && result) { 
       console.log(result); //nothing is logged to the console 
       return result; 
      }; 
     }); 
    } 
}) 
} 

однако, кажется, что результаты не передаются в метод getBatchList по какой-то причине, что я подозреваю, что я что-то не так с тем, как обратный вызовом структурировано (я понятия не имею);

и, наконец, на клиенте вызов метода

if (Meteor.isClient) { 
Template.hello.events({ 
    'click input' : function() { 

     Meteor.call("getBatchList", function(error, result) { 
      if (result && !error) { 
       console.log(result); 
      } else { 
       console.log("nothing returned!!!"); 
      }; 
     }); 
    } 
}); 
} 

, который также не получит каких-либо результатов от сервера нет ошибки или результата.

любая помощь будет оценена.

спасибо.

+0

Я не вижу в ваших ошибках лесозаготовительных кода на консоль. Попробуйте, чтобы убедиться, что вы получаете ошибку, полученную от get, а не результат – landland

ответ

0

Проблема заключалась в том, что код, выполняющийся на сервере, был асинхронным, включая HTTP-запрос и сами функции. я изменил код следующим образом: вместо того, чтобы возвращать результат HTTP-вызова, мы теперь возвращаем сам вызов.

if (Meteor.isServer) { 
    Meteor.methods({ 
     getList: function() { 
      var req = myPackage.getList(); 
      return req; 
     } 
    }) 
}; 

и функция MyPackage GetList в

myPackage = { 
    baseUrl: "http://12.34.56.78:8080/", 

    getList: function() { 
     var url = this.baseUrl + "/getList.xml"; 

     var req = HTTP.get(url, {auth: "user:pass"}); 
     if (req.statusCode === 200) { 
      xml2js.parseStringSync(req.content, function(error, result){ 
       if (!error) { 
        req = result; 
       }; 
      }); 

     }; 
     return req; 
    } 
} 
Смежные вопросы