Когда я начинаю создавать свое приложение, основной целью которого было внедрение службы входа, всякий раз, когда он запускается, он показывает пустую страницу, и я получаю эту ошибку из консоли, которая:
compiler.js:2193 Uncaught Error: Can't resolve all parameters for JwtInterceptor: (?).
at syntaxError (compiler.js:2193)
at CompileMetadataResolver._getDependenciesMetadata (compiler.js:17643)
at CompileMetadataResolver._getTypeMetadata (compiler.js:17539)
Потрачено много время гуглить, понятия не имею, что делать…
Вот как я предоставляю Перехватчик в AppModule:
providers: [CookieService,
{provide: HTTP_INTERCEPTORS, useClass: JwtInterceptor, multi: true},
{provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true}],
bootstrap: [AppComponent]
})
Вот сам Перехватчик:
@Injectable({
providedIn: 'root'
})
export class JwtInterceptor implements HttpInterceptor {
constructor(private userService: UserService,
) {
}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// add authorization header with jwt token if available
const currentUser = this.userService.currentUserValue;
if (currentUser && currentUser.token) {
request = request.clone({
setHeaders: {
Authorization: `${currentUser.type} ${currentUser.token}`,
'Content-Type': 'application/json'
}
});
}
return next.handle(request);
}
}
Вот эта служба пользователя:
Injectable({
providedIn: 'root'
})
export class UserService {
private currentUserSubject: BehaviorSubject<JwtResponse>;
public currentUser: Observable<JwtResponse>;
public nameTerms = new Subject<string>();
public name$ = this.nameTerms.asObservable();
constructor(private http: HttpClient,
private cookieService: CookieService) {
const memo = localStorage.getItem('currentUser');
this.currentUserSubject = new BehaviorSubject<JwtResponse>(JSON.parse(memo));
this.currentUser = this.currentUserSubject.asObservable();
cookieService.set('currentUser', memo);
}
get currentUserValue() {
return this.currentUserSubject.value;
}
login(loginForm): Observable<JwtResponse> {
const url = `${apiUrl}/login`;
return this.http.post<JwtResponse>(url, loginForm).pipe(
tap(user => {
if (user && user.token) {
this.cookieService.set('currentUser', JSON.stringify(user));
if (loginForm.remembered) {
localStorage.setItem('currentUser', JSON.stringify(user));
}
console.log((user.name));
this.nameTerms.next(user.name);
this.currentUserSubject.next(user);
return user;
}
}),
catchError(this.handleError('Login Failed', null))
);
}
logout() {
this.currentUserSubject.next(null);
localStorage.removeItem('currentUser');
this.cookieService.delete('currentUser');
}
private handleError<T>(operation = 'operation', result?: T) {
return (error: any): Observable<T> => {
console.log(error); // log to console instead
// Let the app keep running by returning an empty result.
return of(result as T);
};
}
}