Почему в этом случае Angular HTTPClient повторяет оставшийся вызов дважды? - PullRequest
0 голосов
/ 10 января 2020

У меня есть angular служба, которая использует Rest API, но когда я проверяю сеть и серверную часть, я вижу, что API вызывается дважды каждый раз:

Это мой код службы:

getAllUsers():Observable<any>{
    return this.http.get(this.mainConfigService.getUsersUrl()).pipe(
        map(this.extractData));
}

private extractData(res: Response) {
        let body = res;
        return body || { };
}

В моем компоненте я назвал эту службу:

  getAllUser(){
    let users : User[] = [];
    this.userService.getAllUsers().subscribe(data=>{
      this.usersList=data;
      data.forEach( (element) => {
        users.push(
               {
                fullName: element.fullName,
                firstName:element.firstName,
                lastName:element.lastName,
                mail:element.mail,
                idNumber:element.idNumber,
                accountExpiresDateTime:element.accountExpiresDateTime,
                role:element.role
             }
             );
      });
      this.dataSource = new MatTableDataSource(users);
      this.dataSource.paginator = this.paginator;
      this.dataSource.sort = this.sort;
    },err=>{
      this.handleError(err)
    })
  }

В консоли я вижу, что API вызывается дважды, даже если единственное место, где я вызывал getAllUser (), это метод Init

enter image description here

Я все еще не могу найти причину этой проблемы

Ответы [ 2 ]

6 голосов
/ 10 января 2020

Вероятно, это запрос OPTIONS

Предварительно просвечиваемые запросы

В отличие от простых запросов (описанных выше), предварительно подсвеченные запросы сначала отправляют заголовок запроса HTTP OPTIONS ресурсу на другой домен, чтобы определить, является ли фактический запрос безопасным для отправки. Межсайтовые запросы предварительно просматриваются следующим образом, поскольку они могут иметь значение для пользовательских данных. В частности, запрос предварительно выдан, если:

Он использует методы, отличные от GET или POST. Кроме того, если POST используется для отправки данных запроса с типом содержимого, отличным от application / x- www-form-urlencoded, multipart / form-data или text / plain, например, если запрос POST отправляет на сервер полезную нагрузку XML используя application / xml или text / xml, запрос предварительно просвечивается. Он устанавливает пользовательские заголовки в запросе (например, запрос использует заголовок, такой как X-PINGOTHER)

1 голос
/ 10 января 2020

Если вы используете HttpInterceptor, возможно, так оно и есть. В некоторых случаях это делает.

...