Angular 5的维护页面

时间:2018-03-28 18:08:26

标签: angular

我制作了一个使用REST服务的Angular 5应用程序(Spring Java)。 REST服务和Web应用程序位于不同的服务器上,位于不同的网络中。

我希望为每个Web应用程序添加一个维护模式,不仅可以在我打算在服务器端工作,而且还可以在其他原因需要时使用。 我希望Angular应用程序拦截所有请求并将它们路由到维护页面。

我是以这种方式实现的。我在启动时创建了一个AppConfig,它加载了一个带有应用程序配置的json文件。

@Injectable()
export class AppConfig {

    public config: any = null;

    constructor(private http: Http) { }

    /**
     * Use to get the data found in the file (config file)
     */
    public getConfig(key: any) {
        return this.config[key];
    }

    public load() {
        return new Promise((resolve, reject) => {
            this.http.get('assets/config.json').map(res => res.json()).catch((error: any): any => {
                console.log('Configuration file could not be read');
                resolve(true);
                return Observable.throw(error.json().error || 'Server error');
            }).subscribe((responseData) => {
                this.config = responseData;
                resolve(true);
            });
        });
    }
}

在json文件中,我有一个名为" maintenance"我检查了我的Http拦截器并且我路由到一个特定的页面:

    @Injectable()
export class CustomHttpInterceptor implements HttpInterceptor {

  private jwtHelper = new JwtHelper();

  constructor(private injector: Injector, private authenticationService: AuthenticationService) { }

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    let clonedRequest = null;

    const appConfig = this.injector.get(AppConfig);
    appConfig.load();


    if (appConfig.getConfig('maintenance').isactive === true) {
      this.authenticationService.maintenance()
    }

同样,它有效,但对我的具体用例有很大的不利。在磁盘上更改时,不会重新加载json文件的内容。 因此,如果我启用维护模式,则仅当用户重新加载网站时,重定向到维护页面才有效。 相反,我的目标是在发出http请求后立即重定向用户。

我想在每次在拦截器中发出http请求时重新加载config.json但是我关注性能以及它是否是最佳实践。此外,我还要添加避免浏览器缓存该配置文件。

一些数据:json文件为1kb,每次加载或多或少需要20-49ms。 Angular应用程序非常庞大,它会产生大量的HTTP请求。

有没有办法以一种好的方式处理这个用例,避免影响性能?

0 个答案:

没有答案