Отладка http.get и наблюдаемых в angular 2

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

Обратите внимание, что я добавил правильные заголовки. Чтобы проверить, мы можем изменить значение заголовка и увидеть, что мы получаем 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-type, установленным как application/json на Postman, он работает без проблем, используя тот же идентификатор и заголовок.

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


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

Я что-то упускаю?

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


Обновлять

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

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

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


person manugupt1    schedule 19.09.2016    source источник


Ответы (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(), чтобы увидеть, какие данные проходят через цепочку операторов.

Известные страницы:

person martin    schedule 20.09.2016