Вопрос с подпиской на обозримый - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть следующий код как часть сервиса:

return this.httpClient.get<Country[]>('http://localhost:8080/countries');

Он проходит модульный тест с поддельными значениями.Однако при использовании в функции ngOnInit () она не присваивает соответствующие значения переменной.

this.supportedCountriesFetcherService.fetchSupportedCountries().subscribe((data) => (this.supportedCountries = data));

Я тестировал с почтальоном, а localhost возвращает соответствующий json.Если бы я регистрировал данные о подписке, а не назначал их, не было бы возвращенных записанных данных (фактически, либо был бы добавлен пустой журнал, либо его вообще не было).

Как я могу решить эту проблему?

Редактировать:

Код, связанный с обслуживанием (без интерфейсов):

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class SupportedCountriesFetcherService {

  public fetchSupportedCountries(): Observable<Country[]> {
     return this.httpClient.get<Country[]>('http://localhost:8080/countries');
  }

  constructor(private httpClient: HttpClient) { }
}

Код, связанный с компонентом:

import { Component, OnInit } from '@angular/core';
import { Country, SupportedCountriesFetcherService } from 'src/app/services/supported-countries-fetcher.service';


@Component({
  selector: 'app-input-form',
  templateUrl: './input-form.component.html',
  styleUrls: ['./input-form.component.css']
})
export class InputFormComponent implements OnInit {

  private supportedCountries: Country[];

  constructor(private supportedCountriesFetcherService: SupportedCountriesFetcherService) { }

  ngOnInit() {
     this.supportedCountriesFetcherService.fetchSupportedCountries()
     .subscribe((data) => this.supportedCountries = data, (error) => console.log(error));
   }

}

1 Ответ

0 голосов
/ 11 декабря 2018

Возможно, вы получили сообщение об ошибке http-запроса.Попробуйте изменить подписку, добавив обработчик ошибок, например:

this.supportedCountriesFetcherService.fetchSupportedCountries()
  .subscribe(
     (data) => this.supportedCountries = data,
     (err) => console.error(err);
  );

, и вы должны увидеть ошибку.

Я предполагаю, что ваше приложение Angular работает на порту 4200, чтоозначает, что если вы не используете прокси, вы, вероятно, получаете ошибку CORS.

Если это так, то в целях разработки проще всего настроить прокси-сервер.

С официальными документами по настройке прокси-сервера сервера разработки веб-пакетов можно ознакомиться по адресу * 1010.*https://angular.io/guide/build#proxying-to-a-backend-server

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...