Angular In-memory-web-api找不到单个对象会抛出404

时间:2018-04-19 16:57:16

标签: angular angular-in-memory-web-api

我有一个角度应用程序,我正在使用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"}

网址看起来不错,所以我不知道为什么它不起作用。

最奇怪的是,如果我收到所有播客,它确实有效!

在服务中,我有一种获取所有播客的方法:

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的新手,所以要善良!)

1 个答案:

答案 0 :(得分:1)

两件事,

首先:`

  

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

`如此处所述link description here

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

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

希望有所帮助