вызов stackexchange api со стороны сервера в Meteor

#meteor #meteorite #stackexchange-api

#meteor #meteorite #stackexchange-api

Вопрос:

Я попытался вызвать stackexchange api со стороны клиента, используя приведенный ниже код, он работает нормально

 HTTP.call("GET",questionsURL,{params:{site:"stackoverflow",key:key,function(e,res)
       {
          if(e)
          {
             console.log("error" e);
          }
          else
          {
           //logic
          }
        });
  

Когда я попытался вызвать ту же функцию со стороны сервера, она возвращает что-то, что я попытался зарегистрировать, и это показывает следующий результат

ошибка

Код на стороне сервера является

 var futt=new Future();
          HTTP.call("GET", userDetailsURL,{params:{site:"stackoverflow",key:key}},function(error,result)
          {
                futt.return(result);
                console.log(result));
           }); 
           return futt.wait();
  

В чем здесь проблема?Кто-нибудь мне поможет, пожалуйста

Ответ №1:

Похоже, проблема в том, что поток с помощью api закодирован в gzip. (Также задокументировано здесь: http://api.stackexchange.com/docs/compression)

Нет способа передать это, если вы сами не распакуете данные.

Возможно, стоит изучить модуль npm, который делает все это за вас, как те, что перечислены по адресу: https://www.npmjs.org/search ?q=stackexchange

Не похоже, что они разрешают несжатые запросы, а Meteor gzip декодирует результаты

Комментарии:

1. Но почему он возвращает распакованный результат, когда мы вызываем его со стороны клиента

2. @user3716227 Ваш веб-браузер способен анализировать данные gzip’d. Серверная сторона HTTP не знает, что такое gzip. Если вы хотите, вы можете разветвить http-пакет, чтобы добавить эту функциональность, но это очень утомительно.