Я создал веб-сайт в Angular с Angular Universal for SSR. Проблема в том, что BehaviorSubject
теряет свои данные каждый раз, когда я перезагружаю страницу или переключаюсь на другую. И это происходит только при запуске версии приложения SSR - когда я запускаю ng serve
, оно компилируется, запускается и работает должным образом, как и ожидалось. Кроме того, BehaviorSubject хорошо работает после NgOnInit
из-за этой фабрики в моем AppModule:
export function appInitializerFactory(authService: AuthService) {
return () => authService.checkUserOnFirstLoad();
}
А вот мой AuthService:
@Injectable({ providedIn: 'root' })
export class AuthService {
private user$ = new BehaviorSubject<User | null>(null);
constructor(private http: HttpClient, private tokenStorage: TokenStorage) {}
setUser(user: User | null): void {
if (user) this.user$.next(user);
}
getUser(): Observable<User | null> {
return this.user$.asObservable();
// ^^^^ value of this returns null every time
}
me(): Observable<User> {
const token: string | null = this.tokenStorage.getToken();
if (token === null) return EMPTY;
return this.http.get<MeOutput>(`${environment.apiBaseUrl}/auth/me`).pipe(
tap(({ userDetails }) => this.setUser(userDetails)),
pluck('user')
);
}
checkUserOnFirstLoad(): Promise<User> {
return this.me().toPromise();
}
}
Пожалуйста, помогите мне понять это поведение.