2016-09-19 4 views
0

Я пытаюсь получить API REST от Ensemble, запущенного на Angular2 с использованием наблюдаемых. Я не уверен, в чем проблема. Вот как выглядит мой код (и здесь прилагается ошибка http://pastebin.com/mSHEq43H)Отладка http.get и наблюдаемых в угловом 2

Обратите внимание, что я добавил соответствующие заголовки. Чтобы проверить, мы можем изменить значение заголовка и видеть, что мы получаем 415, если я изменяю заголовок .


let header = new Headers(); 
    header.append('Content-type', 'application/json'); 
    this.http.get('http://rest.ensembl.org/lookup/id/ENSG00000157764?expand=0', 
{ 
     headers: header 
    }) 
     .map((res: Response) => res.json()) 
     .subscribe(
     data => { 
     console.log('data'); 
     this.data = data; 
     }, 
     error => { 
     this.errorMessage = <any>error; 
     }, 
    () => console.log('random look complete')); 

Я также попробовал свои API только с заголовком Content-типа, установленного в качестве приложения/JSON на Почтальон он работает без каких-либо вопроса, используя тот же идентификатор и заголовок.

Для отладки дальше, я использовал альтернативный API, который работает отлично


this.http.get('http://jsonplaceholder.typicode.com/photos/1') 
    .map((res: Response) => res.json()) 
     .subscribe(res => { 
      this.data = res; 
      this.errorMessage = false; 
     }); 

Я пропускаю на что-нибудь?

Другие вопросы, которые у меня есть, есть, если есть простой способ отладки без обхода? Любой ресурс будет полезен.


Update

я понял, что проблема Угловой 2 на RC5 (я не проверил с финальным релизом пока). API http.get имеет два параметра (url, RequestOptionsArg).

Если я использую RequestOptionsArg, тогда я должен передать ВСЕ параметры, даже если тело было пустым.

В документации указано, является ли тело пустым, ему будет присвоено значение null или undefined. Однако API вызывает toString(), и я предполагаю, что нет никаких проверок для null и, следовательно, проблемы.

ответ

1

Ну это выглядит как ошибка:

ORIGINAL EXCEPTION: TypeError: Cannot read property 'toString' of null 
ORIGINAL STACKTRACE: 
TypeError: Cannot read property 'toString' of null 
    at Request.Body.text (http://172.17.110.205:3000/vendor.bundle.js:47211:26) 
    at Request.getBody (http://172.17.110.205:3000/vendor.bundle.js:49014:29) 
    at Observable._subscribe (http://172.17.110.205:3000/vendor.bundle.js:46832:37) 
    at Observable.subscribe (http://172.17.110.205:3000/vendor.bundle.js:87952:62) 
    at Observable._subscribe (http://172.17.110.205:3000/vendor.bundle.js:88009:28) 
    at MapOperator.call (http://172.17.110.205:3000/vendor.bundle.js:90202:23) 
    at Observable.subscribe (http://172.17.110.205:3000/vendor.bundle.js:87952:38) 
    at SearchComponent.onSubmit (http://172.17.110.205:3000/0.chunk.js:37:14) 
    at DebugAppView._View_SearchComponent2._handle_click_14_0 (SearchComponent.ngfactory.js:730:35) 

Так же просьба вернуть любое тело? Ваш код выглядит хорошо, поэтому проблема, вероятно, в другом месте. Является ли приведенный выше код кодом от SearchComponent?

Что касается отладки rxjs кода, вы можете определенно найти некоторые интересные статьи Google, однако, как правило, единственными опциями пользуются оператор do(), чтобы увидеть, какие данные проходят через цепочку операторов.

Заметные страницы:

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