Używam do opracowania kąta 2 in-memory-web-api
. Dla środowiska produkcyjnego chcę wyłączyć interfejs webowy w mojej pamięci i mój prawdziwy interfejs API. Czy jest jakiś sposób wyłączenia produkcji?Wyłącz kątową2 w pamięci-web-api do produkcji
Odpowiedz
Zakładając, że masz jakiś rodzaj "przełącznika", niezależnie od tego, czy jest to Angular CLI environment
do węzła ENV, możesz po prostu zmienić, który z nich powinien być użyty XHRBackend
. in-memory-web-api
używa własnego zaplecza administracyjnego InMemoryBackendService
. Więc można zrobić coś takiego
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 {
}
Tutaj jesteśmy importowania HttpModule
, a następnie tworząc zależność XHRBackend
dynamicznie. W środowisku programistycznym będzie korzystać z usługi backendu, co w rzeczywistości dzieje się, gdy używamy modelu InMemoryWebApiModule
. Dlatego zamiast korzystać z tego modułu, sami konfigurujemy usługę backendu. W środowisku produkcyjnym po prostu używa tego samego XHRBackend
, który normalnie byłby używany.
Zwróć także uwagę na environment
. To tylko przykład. To prawdopodobnie nie będzie używane przez ciebie. Idealnie, środowisko powinno być czymś, co jest sterowane z linii poleceń. W przypadku Angular CLI, w rzeczywistości zapewnia on zmienną environment
znajdującą się w environment/environment
. Środowisko automatycznie przełącza się za pomocą interfejsu CLI w kompilacji produkcyjnej.
Jeśli nie korzystasz z interfejsu CLI, możesz prawdopodobnie użyć węzła ENV lub w inny sposób zaplanować przełączanie produkcji. Chodzi o to, że użyty powyżej environment
jest tylko przykładem. Idealnie nie jest to coś, co chcesz ręcznie zmienić. Twój projekt powinien mieć jakiś sposób, aby określić kompilację produkcji, i która powinna być dostępna w twoim kodzie.
Również z powyższym AppHttpModule
, nie trzeba już importować HttpModule
do swojej AppModule
, tylko importować AppHttpModule
To proste podejście działa dla mnie:
const ENV = 'prod'; // your global ENV variable;
-----
@NgModule({
imports: [
...
HttpModule,
ENV !== 'prod' ? InMemoryWebApiModule.forRoot(DataMockService) : [],
],
...
})
export class AppModule {}
Ten sam sposób:
import { environment } from './app.constants';
let myTestApiModule = [];
if (!environment.production) {
myTestApiModule.push(InMemoryWebApiModule.forRoot(InMemDataService,
{ delay: 500 })
);
}
imports: [
CommonModule,
SharedModule,
...myTestApiModule,
],
Do czego służy '{delay: 500}'? –
To opóźnienie dla api połączeń. Na przykład robię http.get (...), a otrzymam wynik po pauzie w 500 ms. Po prostu sztuczne opóźnienie emulacji prawdziwego serwera lub złej sieci i zachowanie testowe twojego asynchronicznego kodu. –
- 1. Expressjaki do produkcji
- 2. OpenJDK - gotowy do produkcji?
- 3. Mongoose indeksowanie w kodzie produkcji
- 4. g ++ - używa flagi "-g" do produkcji produkcji dobry pomysł?
- 5. LaTeX do generowania plików PDF w produkcji
- 6. Zwolnienie z rozwoju do produkcji w maven
- 7. Złap UIViewAlertForUnsatisfiableConstraints w produkcji
- 8. Debugowanie aplikacji w produkcji
- 9. jak wdrożyć aplikację kątową2 zbudowaną przy użyciu kątowego-cli
- 10. Running Django Seler w produkcji
- 11. błędy Nodejs debugowania w produkcji
- 12. Jak uruchomić gevent w produkcji
- 13. Rejestrowanie produkcji w programie Flex
- 14. Wykonywanie zrzutów wątków w produkcji
- 15. Czy php: // temp safe do produkcji?
- 16. Czy Android Studio jest gotowe do produkcji?
- 17. Doker na Windows w produkcji
- 18. Używanie serwera HTTP Go do produkcji
- 19. Wyłącz "Dopasuj do strony" w Chrome
- 20. Wdrażanie Capistrano do inscenizacji i produkcji
- 21. emacs powłoki rur produkcji do nowego bufora
- 22. Wyłączanie reakcji Chrome DevTools do produkcji
- 23. Czy JRuby jest gotowy do produkcji?
- 24. Dlaczego XAMPP nie nadaje się do produkcji?
- 25. Wtyczka Maven Shade do produkcji dwóch słoików
- 26. Skonfigurować session_store.rb do obsługi przemieszczania i produkcji?
- 27. Czy "morbo" Mojoliciousa jest dobre do produkcji?
- 28. Jak używać jQuery do produkcji TinyURL
- 29. Jak wdrożyć aplikację Happstack do produkcji?
- 30. SQL do produkcji Top 10 i innych
To jest świetny przykład. Naprawdę pomaga mi to uprościć. Nie śledzę tego, co robi argument przeglądarki. – Winnemucca
@ Winnemucca Są to wszystkie zależności wymagane dla XHRBackend. Być może nie wiesz, do czego służy, ale jest to wymagane. Po prostu spojrzałem na źródło XHRBackend i zobaczyłem, że to wymaga, więc dodałem to jako zależność. To samo dotyczy opcji ResponseOptions i XSRFStrategy. Nie mogę powiedzieć dokładnie, do czego używa ich backend, ale jeśli jesteś ciekawy, spójrz na kod źródłowy zaplecza. Nie tylko to wymyśliłem. Backend wymaga tych rzeczy, niezależnie od tego, czy je tworzymy, czy też Angular. –
https://github.com/angular/angular/tree/master/packages/http/src/backends –