我有一个角度应用程序,我正在使用 in-memory-web-api 来模拟一些对尚未启动和运行的 REST api 的 http 调用。
我试图通过点击以下 app-routing-module.ts 设置来获取一些 Podcast 对象:
const routes: Routes = [
{ path: 'podcast/:name', component: PodcastComponent }
];
在我的组件中,我从播客服务调用 getPodcast() 方法,如下所示:
getPodcast(name): void {
this.podcastService.getPodcast(name).subscribe(Podcast => {
this.podcast = Podcast;
console.log("This.podcast = " + JSON.stringify(this.podcast));
this.getEpisodes();
});
}
播客服务如下所示:
private podcastUrl = 'api/podcasts';
getPodcast(name): Observable<Podcast> {
return this.http.get<Podcast>(`${this.podcastUrl}/${name}`);
}
我的 in-memory-web-api 看起来像这样:
const podcasts = [
{ name: '@user1' },
{ name: '@user2' },
{ name: '@user3' }
];
return {
podcasts
};
}
我有一个播客对象定义为:
export class Podcast {
name: string;
}
但是,当我尝试获取 Podcast 时,它会在控制台中抛出 404:
ERROR {body: {…}, url: "api/podcasts/@user1", headers: HttpHeaders, status: 404, statusText: "Not Found"}
URL 看起来不错,所以我不知道为什么它不起作用。
最奇怪的是,如果我得到所有的播客,它确实有效!
在服务中,我有一种获取所有播客的方法:
getPodcasts(): Observable<Podcast[]> {
return this.http.get<Podcast[]>(this.podcastUrl);
}
然后更改组件中的 getPodcast() 函数来调用它:
getPodcast(name): void {
this.podcastService.getPodcasts().subscribe(Podcasts => {
Podcasts.forEach((podcast, i) => {
if(podcast.name === name) this.podcast = podcast;
});
});
}
然后它完美地工作。我在这里做一些完全愚蠢的事情?这是非常奇怪的行为......(我是 Angular 的新手,所以请善待!)