Ошибка с HTTPClient после обновления до Angular 6, вызов API перенаправлен на localhost: 4200 - PullRequest
0 голосов
/ 15 мая 2018

У меня возникла проблема после обновления до Angular 6 с Angular 5. Я использую 2 перехватчика, один из "@ auth0 / angular-jwt", чтобы добавить заголовок авторизации, и я использую другой, который я создал, чтобы изменить любой URL с # myAPI # на конкретный URL

здесь код

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

    if (req.url.startsWith('#myAPI#')) {

      req = req.clone({
        url: req.url.replace('#myAPI#', 'http://localhost:0987/api' ),
      });
    }

    return next.handle(req);
  }

и конфигурации JwtModule в AppModule

export function jwtOptionsFactory(cookieService) {
  return {
    tokenGetter: () => {
      return cookieService.get('AuthToken');
    }
  };
}

imports: [
    BrowserModule,
    BrowserAnimationsModule,
    HttpClientModule,
    JwtModule.forRoot({
      jwtOptionsProvider: {
        provide: JWT_OPTIONS,
        useFactory: jwtOptionsFactory,
        deps: [CookieService]
      }
    }),
]
providers: [
    { provide: APP_BASE_HREF, useValue: '/' },
    { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true },
]

Теперь проблема в том, если я сделаю запрос, используя HTTPClient, как это

this.http.get<any[]>(`#myAPI#/Users`)

волшебным образом запрос будет преобразован в http://localhost:4200/, получит html-данные страницы и попытается проанализировать их как json, что не ожидается.

{
  "headers": {
    "normalizedNames": {},
    "lazyUpdate": null
  },
  "status": 200,
  "statusText": "OK",
  "url": "http://localhost:4200/",
  "ok": false,
  "name": "HttpErrorResponse",
  "message": "Http failure during parsing for http://localhost:4200/",
  "error": {
    "error": {},
    "text": "<!DOCTYPE html><html><head>\n  <meta charset=\"utf-8\">\n  <title></title>\n\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n </head>\n<body>\n  <my-app>Loading...</my-app>\n\n     </div>\n\n\n\n<script type=\"text/javascript\" src=\"runtime.js\"></script><script type=\"text/javascript\" src=\"polyfills.js\"></script><script type=\"text/javascript\" src=\"styles.js\"></script><script type=\"text/javascript\" src=\"scripts.js\"></script><script type=\"text/javascript\" src=\"vendor.js\"></script><script type=\"text/javascript\" src=\"main.js\"></script></body></html>"
  }
}

Я ожидаю получить любой массив. Я попытался отладить перехватчик сам, но он не достиг функции перехвата сам. Но я использую TranslateModule, например, чтобы получить перевод, и он отлично работает, и у меня есть другой запрос как this.http.get<any>( # myAPI # / Blogs / 1 ) и дело не в том, массив это или объект, потому что я пытался использовать просто получить или получить и получить, и это не сработало. любая идея, как я могу отлаживать или знаю, почему иногда это не идет к перехватчику, а иногда это делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...