Angular2 - 哪里可以使用InMemoryWebApiModule配置端点?

时间:2017-11-22 12:43:29

标签: angular http local-storage angular2-services endpoint

我正在关注this tutorial(oficial Angular2“快速入门”教程)

最后,有几个http请求(GET,POST,PUT,DELETE ...),而不是调用真实服务器,使用app.module.ts中的这些行进行模拟:

// The HttpClientInMemoryWebApiModule module intercepts HTTP requests
// and returns simulated server responses.
// Remove it when a real server is ready to receive requests.
HttpClientInMemoryWebApiModule.forRoot(
  InMemoryDataService, { dataEncapsulation: false }
)

以下是应用程序发出的HTTP请求的示例:

  private heroesUrl = 'api/heroes';  // URL to web api

  /** GET heroes from the server */
  getHeroes (): Observable<Hero[]> {
    return this.http.get<Hero[]>(this.heroesUrl)
      .pipe(
        tap(heroes => this.log(`fetched heroes`)),
        catchError(this.handleError('getHeroes', []))
      );
  }

问题:有没有办法配置这个InMemoryDataService所期望的端点?因此,举例来说,我可以将网址更改为api/heroes/getAll

2 个答案:

答案 0 :(得分:1)

按照@Szarik建议,我关注this link,它有答案。实际上,它是我正在使用的库的官方规范:in-memory-web-api

在README.md中潜水一点,我们达到了这个目的:

  

您可以通过在InMemoryDbService中实现parseRequestUrl方法来覆盖默认解析器。

     

该服务使用两个参数调用您的方法。

     
      
  1. url - 请求网址字符串
  2.   
  3. requestInfoUtils - RequestInfoUtilities对象中的实用程序方法,包括默认解析器。请注意,尚未设置某些值,因为它们取决于解析的结果。
  4.         

    您的方法必须返回ParsedRequestUrl对象或null | undefined,在这种情况下,服务使用默认解析器。通过这种方式,您可以拦截和解析某些URL,并将其他URL保留为默认解析器。

就是这样!

答案 1 :(得分:0)

要体现上述答案: “ forRoot”采用可选设置,其中包括“ apiBase”。匹配

的端点

private url = '/some/endpoint/responseExample';

设置没有前缀和后缀斜杠的相应“ apiBase”:

    HttpClientInMemoryWebApiModule.forRoot(InMemoryDbItemService, { apiBase: 'some/endpoint'})

“ responseExample”是实际数据。

   createDb() {
    const responseExample = {[some:'structure']}

    return { responseExample };
  }