Угловой HTTP get запрос не работает в ngOnInit

#angular #httpclient

#угловой #httpclient

Вопрос:

Я пытаюсь извлечь данные из серверного API при загрузке компонента.

Вызов API в сервисном файле

   getFiles(): Observable<any> {
    return this.httpClient.get<any>('http://localhost:5000/api/file');
  }
  

Подписка на эту службу в компоненте внутри OnInit

   ngOnInit(): void {
    this.postDataService.getFiles().subscribe( data => {
      console.log('test', data);
    });
  }
  

Он выдает ответ ниже (200). Я не получаю никакой ошибки

 code: "EINVALIDSTATE"
message: "Requests can only be made in the LoggedIn state, not the SentClientRequest state"
  

Если я вызываю ту же службу (click) , она работает нормально.

  testClick(): void {
    this.postDataService.getFiles().subscribe( data => {
      console.log('test', data);
    });
  }
  

Есть ли какие-либо проблемы с вызовом службы ngOnInit . Как заставить его работать?


Редактировать


После стольких поисков и устранения неполадок я обнаружил, что он выдает ошибку, когда я пытаюсь напрямую загрузить дочерние маршруты. Если я загружаю домашнюю страницу, а затем нажимаю на ссылку, чтобы перейти к любому компоненту, тогда этот вызов api работает нормально.

Комментарии:

1. Вы пробовали делать с OnChages ?

2. @Rohith Да, я это сделал. Но не повезло

3. Запрос in ngOnInit , вероятно, отправляется, когда сервер находится в SentClientRequest состоянии, в то время как запрос in testClick отправляется, когда сервер находится в LoggedIn состоянии. Вы должны дождаться, пока сервер будет в LoggedIn рабочем состоянии, прежде чем отправлять запрос. Есть ли у вас способ отслеживать loggedIn состояние на стороне клиента?

4. @fridoo После стольких отладок я обнаружил, что он выдает ошибку, когда я пытаюсь напрямую загрузить дочерние маршруты. Если я загружаю домашнюю страницу, а затем нажимаю на ссылку, чтобы перейти к этому компоненту, то этот вызов работает нормально

5. @fridoo Да. Я совершенно ничего не понимаю. Если я добавлю тот же вызов API app.componet.ts , он будет работать нормально.

Ответ №1:

Запросы BTW могут выполняться только в состоянии LoggedIn, а не в состоянии SentClientRequest это не ошибка angular. это ошибка на стороне сервера

Пожалуйста, посмотрите на tediousjs.github.io

Комментарии:

1. да, я знаю. Но он работает с щелчком мыши, поэтому путаница