Angular 18.0.5 не видит перехватчик

Angular не распознает перехватчик.

Итак, в основном я выполнил

ng generate interceptor JwtInterceptor

и настройка настроила добавление токена в заголовок:

import { HttpErrorResponse, HttpInterceptorFn } from '@angular/common/http';
import { catchError, throwError } from 'rxjs';

export const jwtInterceptorInterceptor: HttpInterceptorFn = (req, next) => {
  console.info('Interceptor invoked'); 
  let token: string | null = localStorage.getItem("access_token");

  console.info("Token from localStorage:", token);
  if (token) { 
    const clonedRequest = req.clone({
      headers: req.headers.set(
        'x-auth-token',token
      )
    });
  
    return next(clonedRequest).pipe(
      catchError((err: any) => {
        if (err instanceof HttpErrorResponse) {
          if (err.status === 401) {
            console.error('Unauthorized request:', err);
          } else {
            console.error('HTTP error:', err);
          }
        } else {
          console.error('An error occurred:', err);
        }
  
        return throwError(() => err); 
      })
    );
  } else {
    console.info("no token")
    return next(req);
  }


};

Затем добавил перехватчик в провайдере:

export const appConfig: ApplicationConfig = {
  providers: [provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes), provideHttpClient(
    withInterceptors([jwtInterceptorInterceptor]),
  ),]
};

также попробовал шаблон Di в app.config.ts:

export const appConfig: ApplicationConfig = {
  providers: [provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes), provideHttpClient(withInterceptorsFromDi()),  {
    provide: HTTP_INTERCEPTORS,
    useValue: jwtInterceptorInterceptor,
    multi: true

  },]
};

И я даже поместил провайдера внутрь компонента, чего делать не следует, поскольку это может вызвать двойной запуск или вызвать конфликт, как я предполагаю:

@Component({
  selector: 'app-profile',
  standalone: true,
  imports: [ReactiveFormsModule],
  templateUrl: './profile.component.html',
  styleUrl: './profile.component.css',
  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useValue: jwtInterceptorInterceptor,
      multi: true
    }
  ],
})

Я попытался избавиться от всего кода перехватчика и оставить только журналы, но перехватчик все равно не затрагивается ни при каком сценарии:

Примечание

  • Вот ссылка, которая показалась мне наиболее точной: текст
  • Я неделю лет на англуаре.
  • Я разобрался со всеми проблемами stackoverflow

не могли бы вы поделиться stackblitz с минимальным воспроизводимым кодом для отладки? Я думаю, вы неправильно загружаете приложение, например, смешивая автономный и модульный режимы.

Naren Murali 29.06.2024 14:33

вы не ошибаетесь, если я вас правильно понял, в любом случае я решил это (прочитайте последний ответ).

EagleMind 29.06.2024 19:43
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
2
97
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

app.config.ts был неправильной оболочкой, в которой следует вызывать перехваченное, вместо этого я вызвал его в bootstrapApplication() в main.ts, и это сработало:

bootstrapApplication(AppComponent, {
  providers: [
    provideProtractorTestingSupport(),
    provideRouter(routes),
    provideAnimations(),
    provideHttpClient(withInterceptors([jwtInterceptorInterceptor])),
  ],
}).catch((err) => console.error(err));

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