可以从 Angular2 中的“InMemoryWebApiModule”转换吗?
Possible to transition from `InMemoryWebApiModule` in Angular2?
我已经实现了一个基于"Tour of Heroes" tutorial 的项目。我已经到了想要开始使用真正的 REST 后端的地步,但理想情况下,我只想逐个操作地执行此操作。
我更新了 post
调用以将 URL 用于我的 REST 服务,如下所示:
create(hero: Hero): Promise<Hero> {
return this.http
.post("http://127.0.0.1:3001/api/heroes", JSON.stringify(hero), {headers: this.headers})
.toPromise()
.then(res => return res.json().data)
.catch(this.handleError);
}
问题是,这仍然只是命中 InMemoryWebApiModule
提供的 InMemoryDbService
。事实上,我提供的 URL 是什么并不重要——只要它以 /heroes
结尾,它就可以工作。我可以输入任何端口号、任何路径和任何 IP(只要它是以 /heroes
结尾的可解析 URL)。
我预计 HttpModule
会正常工作,而 InMemoryWebApiModule
只会在 URL 解析为应用程序的 URL 时才会被命中。显然情况并非如此,并且以某种方式在您的模块导入中使用 InMemoryWebApiModule.forRoot(InMemoryDataService)
会改变 Http
的工作方式(据我所知)。
所以我的问题是 - 在过渡到真实服务时是否可以继续使用 InMemoryWebApiModule
来托管模拟服务?您将如何修改 "Tour of Heroes" 教程以针对单个操作执行此操作?
您可以将选项配置对象传递给 InMemoryWebApiModule.forRoot
。其中一种配置是passThruUnknownUrl
。将其设置为true
,如果找不到模拟数据中的集合
,它将使用正常的XHRBackend
imports: [
InMemoryWebApiModule.forRoot(MockData, {
passThruUnknownUrl: true
})
]
因此在开发过程中,随着在后端创建新集合,您可以开始在前端删除它们
createDb() {
let cats = [];
let dogs = [];
return {
cats,
// dogs
}
}
最初,内存中会处理 URL /api/cats
和 /api/dogs
。但是可以说 dogs
集合现在是在后端创建的。您可以从上面返回的集合中删除 dogs
,现在内存中会将这些调用转发给正常的 XHRBackend
,以便进行 XHR 调用。
我已经实现了一个基于"Tour of Heroes" tutorial 的项目。我已经到了想要开始使用真正的 REST 后端的地步,但理想情况下,我只想逐个操作地执行此操作。
我更新了 post
调用以将 URL 用于我的 REST 服务,如下所示:
create(hero: Hero): Promise<Hero> {
return this.http
.post("http://127.0.0.1:3001/api/heroes", JSON.stringify(hero), {headers: this.headers})
.toPromise()
.then(res => return res.json().data)
.catch(this.handleError);
}
问题是,这仍然只是命中 InMemoryWebApiModule
提供的 InMemoryDbService
。事实上,我提供的 URL 是什么并不重要——只要它以 /heroes
结尾,它就可以工作。我可以输入任何端口号、任何路径和任何 IP(只要它是以 /heroes
结尾的可解析 URL)。
我预计 HttpModule
会正常工作,而 InMemoryWebApiModule
只会在 URL 解析为应用程序的 URL 时才会被命中。显然情况并非如此,并且以某种方式在您的模块导入中使用 InMemoryWebApiModule.forRoot(InMemoryDataService)
会改变 Http
的工作方式(据我所知)。
所以我的问题是 - 在过渡到真实服务时是否可以继续使用 InMemoryWebApiModule
来托管模拟服务?您将如何修改 "Tour of Heroes" 教程以针对单个操作执行此操作?
您可以将选项配置对象传递给 InMemoryWebApiModule.forRoot
。其中一种配置是passThruUnknownUrl
。将其设置为true
,如果找不到模拟数据中的集合
XHRBackend
imports: [
InMemoryWebApiModule.forRoot(MockData, {
passThruUnknownUrl: true
})
]
因此在开发过程中,随着在后端创建新集合,您可以开始在前端删除它们
createDb() {
let cats = [];
let dogs = [];
return {
cats,
// dogs
}
}
最初,内存中会处理 URL /api/cats
和 /api/dogs
。但是可以说 dogs
集合现在是在后端创建的。您可以从上面返回的集合中删除 dogs
,现在内存中会将这些调用转发给正常的 XHRBackend
,以便进行 XHR 调用。