В моем угловом приложении есть внешний конфигурационный файл, поэтому я могу изменить его, например. URL-адрес API без построения.
Дополнительно я использую @ auth-angular-jwt
В app-module.ts в разделе импорта я должен объявить JWTModule следующим образом:
imports: [
...
JwtModule.forRoot({
config: {
tokenGetter: tokenGetter,
whitelistedDomains: getWhiteList()
}
})
],
...
],
providers: [
AppConfig,
{ provide: APP_INITIALIZER,
useFactory: initializeApp,
deps: [AppConfig], multi: true },
],
bootstrap: [AppComponent]
})
Для модуля JWT я должен предоставить массив whitelistedDomains.
Это также следует прочитать из файла конфигурации.
Это не работает, потому что APP_INITIALIZER запускается после секции импорта. Так что мой AppConfig не определен. Как мне этого добиться.
Вот как выглядит мой AppConfig:
import { Http, Response } from '@angular/http';
import { IAppConfig } from './app-config.model';
import { Injectable } from '@angular/core';
@Injectable()
export class AppConfig {
static settings: IAppConfig;
constructor(private http: Http) {}
load() {
const jsonFile = `assets/config/config.json`;
return new Promise<void>((resolve, reject) => {
this.http.get(jsonFile).toPromise().then((response : Response) => {
AppConfig.settings = <IAppConfig>response.json();
resolve();
}).catch((response: any) => {
reject(`Could not load file '${jsonFile}': ${JSON.stringify(response)}`);
});
});
}
}
А вот как выглядит мой конфиг:
export interface IAppConfig {
env: {
name: string;
}
logging: {
console: boolean;
};
apiServer: {
url:string
signalRUrl: string
whiteListDomains: string[]
};
}
Есть идеи?
С наилучшими пожеланиями!