Используя Angular 7, как мне вызвать API википедии и вернуть результаты в модель?

#angular #typescript #wikipedia-api

#angular #typescript #википедия-api

Вопрос:

Я пытаюсь получить доступ к API Википедии с помощью Angular 7, и результаты по-прежнему равны нулю.

При запуске с сайта API Википедии со следующим: https://en.wikipedia.org/api/rest_v1/page/summary/Addax?redirect=true Я получаю результаты в виде правильно отформатированной строки JSON.

Когда тот же запрос выполняется из моего приложения, тело ответа пустое.

Вот запрос:

 export class WikirestService {
  constructor( private http:  HttpClient) { }

  getWiki(title: string) {
    const tempTitle = title.replace(' ', '_')   '?redirect=true';
    const baseUrl = 'https://en.wikipedia.org/api/rest_v1/page/summary/';
    return this.http.get<WikiSummary>(baseUrl tempTitle);
  }
}
  

и модель WikiSummary:

  export class WikiSummary {
      type?:          string;
      title?:         string;
      displaytitle?:  string;
      namespace?:     Namespace;
      wikibase_item?: string;
      titles?:        Titles;
      pageid?:        number;
      thumbnail?:     Originalimage;
      originalimage?: Originalimage;
      lang?:          string;
      dir?:           string;
      revision?:      string;
      tid?:           string;
      timestamp?:     Date;
      description?:   string;
      content_urls?:  ContentUrls;
      api_urls?:      APIUrls;
      extract?:       string;
      extract_html?:  string;
    }
  

Я ожидаю, что модель будет заполнена, но она всегда равна null. Даже когда я регистрирую результаты, они равны нулю.
Вызов из компонента:

 this.wikiRest.getWiki(this.title).subscribe(data => { temp = data; });
  

Я потратил несколько часов на борьбу с этим и мог бы действительно использовать некоторые рекомендации. Это первый раз, когда у меня возникла проблема с вызовом внешнего API.

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

1. вы проверили на вкладке сеть, каково фактическое возвращаемое значение?

2. это может быть фильтрация angular CORS, но я думаю, что это довольно строго, чтобы убедиться, что проверяете консоль во время выполнения запроса

3. Мне удалось вернуть правильный результат и поработать с ним. Я действительно не понимаю, в чем проблема

Ответ №1:

Как у вас есть, я попробовал (без неизвестных типов данных). это работает без проблем. Возможно, вы пытаетесь проверить значение temp вне асинхронного вызова??? значение данных доступно только в результате (без каких-либо специальных действий)

    this.wikiRest.getWiki('Addax').subscribe(data => {
      console.log(data.description);
    }, err => { console.log('something went wrong'   err)
  }); 



getWiki(title: string) {
  const tempTitle = title.replace(' ', '_')   '?redirect=true';
  const baseUrl = 'https://en.wikipedia.org/api/rest_v1/page/summary/';
  return this.http.get<WikiSummary>(baseUrl tempTitle);
}

export class WikiSummary {
  type?:          string;
  title?:         string;
  displaytitle?:  string;
 // namespace?:     Namespace;
  wikibase_item?: string;
  //titles?:        Titles;
  pageid?:        number;
  //thumbnail?:     Originalimage;
 // originalimage?: Originalimage;
  lang?:          string;
  dir?:           string;
  revision?:      string;
  tid?:           string;
  timestamp?:     Date;
  description?:   string;
  //content_urls?:  ContentUrls;
  //api_urls?:      APIUrls;
  extract?:       string;
  extract_html?:  string;
}
  

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

1. Спасибо. Это именно то, что происходило. Я зашел так далеко по кроличьему следу, что потерял ориентацию!