У меня возникла проблема после обновления до 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 )
и дело не в том, массив это или объект, потому что я пытался использовать просто получить или получить и получить, и это не сработало.
любая идея, как я могу отлаживать или знаю, почему иногда это не идет к перехватчику, а иногда это делает.