Обработка времени ожидания OAM в Angular 6 с помощью Route-Resolvers

У меня есть приложение Angular 6, которое использует cookie-файлы для проверки подлинности OAM для взаимодействия с внутренними веб-службами. Сеансы OAM истекают через X минут или когда тот же пользователь вошел в систему с другого устройства. Я хочу справиться с этим и отобразить всплывающее окно для пользователей, чтобы они могли щелкнуть их и перейти на страницу входа. Я создал HttpInterceptor и вызываю службу для отображения всплывающего окна.

Когда я развертываю приложение (создаю его, используя ng build и конфигурации производственного режима) он прекрасно работает всякий раз, когда истекает сеанс, и следующее действие пользователя - перейти к пути, для которого не определен определитель маршрута, определенный в модуле маршрутизации, то есть службы вызываются внутри компонента после инициализации. Всякий раз, когда я пытаюсь перейти к пути, для которого сначала нужно вызвать распознаватель, ничего не происходит. Я пытался добавить консольные журналы и несколько раз переустанавливал, чтобы увидеть, что может быть не так, но распознаватель и перехватчик даже не вызываются. Я просто получаю следующие ошибки на вкладке Консоль, и никакой навигации не происходит:

Uncaught SyntaxError: Unexpected token < at https://login...?bmctx=920634F2F55...e9b2.js

Error: Loading chunk 21 failed...

Из того, что я понимаю, 1-я ошибка заключается в том, что он пытается проанализировать ответ на запрос (который происходит от автоматического перенаправления OAM на страницу входа в систему) и < характер это начало <!DOCTYPE html>, Кстати, это тот же ответ, который возвращает код ошибки 200 и который я проверяю в моем перехватчике для отображения всплывающего окна.

Странно то, что этого не происходит, когда я запускаю приложение в режиме отладки (используя ng serve команда). Перехватчик вызывается правильно и во всех случаях! Может ли это быть что-то, связанное с моими конфигурациями сборки, или я пропускаю что-то, связанное с обработкой тайм-аута OAM?

Ниже приведены некоторые разделы моего кода:

@Injectable()
export class ResponseInterceptor implements HttpInterceptor {
  constructor(private alertMessageService: AlertMessagesService) { }

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

    return next.handle(req).pipe(catchError((error: any, caught: Observable<HttpEvent<any>>) => {

      if ((error.status === 200 || error.status === 0) && error.url.indexOf('login.') !== -1) {
        this.alertMessageService.displayLogoutConfirmation();
        return of(error);
      }

      throw error;
    }));
  }
}

Развертывание конфигураций сборки в angular.json:

"configurations": {
    "dev1": {
      "optimization": true,
      "outputHashing": "all",
      "sourceMap": false,
      "extractCss": true,
      "namedChunks": false,
      "aot": true,
      "extractLicenses": true,
      "vendorChunk": false,
      "buildOptimizer": true,
      "fileReplacements": [
        {
          "replace": "src/./environments/environment.ts",
          "with": "src/./environments/environment.prodpro.ts"
        }
      ]
    },

0 ответов

Другие вопросы по тегам