我使用angular2 in-memory-web-api
进行开发。对于生产环境,我想禁用in-memory-web-api和我要使用的真实API。有没有办法禁用生产的InMemoryWebApiModule
?
答案 0 :(得分:5)
假设您有某种“切换”,无论是节点ENV的Angular CLI environment
,您都可以切换应该使用哪个XHRBackend
。 in-memory-web-api
使用自己的后端InMemoryBackendService
。所以你可以做类似
import { NgModule, Injector } from '@angular/core';
import { HttpModule, XHRBackend, BrowserXhr,
ResponseOptions, XSRFStrategy } from '@angular/http';
import { InMemoryBackendService, InMemoryDbService } from 'angular-in-memory-web-api';
let environment = {
production: true
};
export class MockData implements InMemoryDbService {
createDb() {
let cats = [
{ id: 1, name: 'Fluffy' }
];
return { cats };
}
}
@NgModule({
imports: [ HttpModule ],
providers: [
{
provide: XHRBackend,
useFactory: (injector: Injector, browser: BrowserXhr,
xsrf: XSRFStrategy, options: ResponseOptions): any => {
if (environment.production) {
return new XHRBackend(browser, options, xsrf);
} else {
return new InMemoryBackendService(injector, new MockData(), {
// the configuration object
});
}
},
deps: [ Injector, BrowserXhr, XSRFStrategy, ResponseOptions ]
}
]
})
export class AppHttpModule {
}
在这里,我们导入HttpModule
,然后动态创建XHRBackend
依赖项。在开发环境中,它将使用后端服务,这实际上是在我们使用InMemoryWebApiModule
时发生的情况。因此,我们不是使用该模块,而是自己配置后端服务。在生产环境中,它只使用通常使用的XHRBackend
。
另请注意environment
。这只是一个例子。这可能不会被您使用。理想情况下,环境应该是在命令行上控制的。使用Angular CLI,它实际上提供了environment
中的environment/environment
变量。环境会在生产版本中通过CLI自动切换。
如果您没有使用CLI,那么您可能会使用节点ENV或您计划切换生产的任何方式。关键是,上面使用的environment
只是一个例子。理想情况下,这不是您想要手动更改的内容。您的项目应该有一些方法来确定生产构建,并且应该能够在您的代码中访问它。
同样使用上述AppHttpModule
,您不再需要将HttpModule
导入AppModule
,只需导入AppHttpModule
答案 1 :(得分:3)
这种简单的方法对我有用:
const ENV = 'prod'; // your global ENV variable;
-----
@NgModule({
imports: [
...
HttpModule,
ENV !== 'prod' ? InMemoryWebApiModule.forRoot(DataMockService) : [],
],
...
})
export class AppModule {}
答案 2 :(得分:1)
同样的方式:
import { environment } from './app.constants';
let myTestApiModule = [];
if (!environment.production) {
myTestApiModule.push(InMemoryWebApiModule.forRoot(InMemDataService,
{ delay: 500 })
);
}
imports: [
CommonModule,
SharedModule,
...myTestApiModule,
],