Angular Универсальный и BehaviorSubject - PullRequest
0 голосов
/ 03 августа 2020

Я создал веб-сайт в 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();
  }
}

Пожалуйста, помогите мне понять это поведение.

...