1

我有一个角度应用程序,我正在使用 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 的新手,所以请善待!)

4

1 回答 1

1

两件事情,

第一个:`

内存中的 web api 库当前假定每个集合都有一个名为 id 的主键。

`如此处所述链接描述此处

第二:如果你想使用不同于“id”的东西来“获取”一些东西,你必须使用这个sintax:

GET api/heroes?name=^j //URL?PropertyName=Value

希望能帮助到你

于 2018-04-19T18:28:39.830 回答