#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. Спасибо. Это именно то, что происходило. Я зашел так далеко по кроличьему следу, что потерял ориентацию!