Получить данные из http запроса в Angular 5 - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь создать небольшую консоль монитора / управления сервером с помощью nodejs, expressjs и Angular 5. Чтобы определить, работает ли служба apache на удаленном сервере, я создал внутренний скрипт, который пытается получить скрипт изсервер я хочу контролировать.Проблема в том, что я не знаю, как получить данные a http.get из угловых возвратов.В приведенном ниже примере я пытаюсь установить переменную this.apacheRunning для ответа на запросы http.get.Буду благодарен за любую помощь!

getApacheRunning(): Observable<String>{

    this.apacheRunning = this.http.get("http://localhost:3000/ison").subscribe(result => this.apacheRunning = result,(err) => console.log(err), ()=> console.log("done"));
    console.log(this.result);

    if(this.apacheRunning == "true"){
      console.log(this.apacheRunning + "DEBUG2");
      return of("true");
    }else{
      console.log(this.apacheRunning + "DEBUG1");
      return of("false")
    }



}

Код доступен на gitHub под: https://github.com/Clemens-Dautermann

Ответы [ 3 ]

0 голосов
/ 11 мая 2018

Вы пытаетесь получить запрос Async , затем вам нужно перехватить значение ответа в ответном обратном вызове. Взгляните на этот пример:

this.repository().subscribe(result =>{
   this.apacheRunning = result;
});

repository(){
    return this._http.get("http://localhost:3000/ison")
    .map(res => { 
        return res.json().map(item => { 
           return item;
     });
   });
}
0 голосов
/ 11 мая 2018

Вам необходимо записать свои apacheRunning условия в цикле подписки.

Измените код следующим образом:

getApacheRunning(): Observable<String>{

  this.apacheRunning = this.http.get("http://localhost:3000/ison").subscribe(result => {
    this.apacheRunning = result
    if(this.apacheRunning == "true"){
     console.log(this.apacheRunning + "DEBUG2");
     return of("true");
    }else{
      console.log(this.apacheRunning + "DEBUG1");
      return of("false")
    }
    console.log(result);
  },(err) => console.log(err), () => console.log("done"));
}
0 голосов
/ 10 мая 2018

Вы не хотите на самом деле подписаться на ваш метод.Скорее вы хотите вернуть наблюдаемый результат из http-запроса.

Если вы хотите зарегистрировать отладку, чтобы увидеть, каков результат, вы можете связать операцию do в вашей наблюдаемой цепочке.

Если вы хотите выполнить обработку результата, чтобы преобразовать его, вы можете использовать оператор map в вашей наблюдаемой цепочке.

Если вы хотите обрабатывать ошибки, возникающие из-за невозможности связаться с сервером, вы можете использовать оператор catch и вернуть соответствующий результат или выполнить другую обработку.

getApacheRunning(): Observable<string> {
    return this.http.get('http://localhost:3000/ison')
        .do(res => console.log('apacheRunning ', res))
        .map(res => (res === 'true').toString())
        .catch(err => {
            console.log('Failed to determine if Apache is running', err);
            return Observable.of('false');
        });
}
...