HTTP-код состояния клиента всегда возвращает неопределенный - PullRequest
1 голос
/ 15 апреля 2020

Я создаю приложение в angular. У меня есть служба для вызова остальных API, когда я пытаюсь утешить или предупредить код состояния ответа, который я получаю неопределенным. Хотя, если я утешу данные возвращаются из остальных API, он успешно показывает данные. Ознакомьтесь с приведенным ниже кодом и предложите, как получить код состояния ответа HTTP.

export type AjaxResponse = {
  response: {
    [key: string]: any
  },
  status: number
}


apiCall(
    data: any,
    url: any,
    method: 'DELETE' | 'GET' | 'HEAD' | 'POST' | 'JSONP' | 'PUT',
    isRawUrlFormat: boolean = false
  ) {
    // Checking if the provide url is in raw format or not
    if (isRawUrlFormat == false) {
      url = environment.API_URL + "/" + url;
    }

    let requestHeaders = new HttpHeaders();
    let token = this._authTokenService.getUserToken();

    if (token != undefined || token != null || token != '') {
      requestHeaders = requestHeaders.set(
        "Authorization",
        "Bearer " + token
      );
    }

    const requestOptions: {
      headers: HttpHeaders,
      responseType: 'json'
    } = {
      headers: requestHeaders,
      responseType: 'json'
    }

    let request$: Observable<AjaxResponse>;

    switch (method) {
      case 'POST':
        request$ = this._http.post<AjaxResponse>(url, data, requestOptions);
        break;
      case 'PUT':
        request$ = this._http.put<AjaxResponse>(url, data, requestOptions);
        break;
      default:
        request$ = this._http.request<AjaxResponse>(method, url, requestOptions);
    }




    return request$.pipe(
      //timeout(environment.AJAX_TIMEOUT),
      map(apiResult => {
        const status : number = apiResult.status;
        console.log(status);
        return apiResult;
      }),
      catchError(error => {
        const status : number = error.status;
        console.log(status)
        return throwError(error)
      })
    );
  }

1 Ответ

2 голосов
/ 15 апреля 2020

Непонятно, как вы делаете этот звонок. Я вижу, что вы создали type для AjaxResponse, а затем у вас есть дополнительная функция для apiCall. Но неясно, что вы на самом деле используете для инициирования запроса.

Поскольку вы пометили angular, вам следует использовать HttpClient для вызовов Http. Если вы пытаетесь использовать что-то другое, вам придется обратиться к их документации.

Однако, чтобы ответить на ваш вопрос, чтобы получить действительный код состояния в Angular с помощью HttpClient, вы можете выполните следующие действия:

Добавление { observe: 'response' } даст вам полную полезную нагрузку, а не только ответ.

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

HttpClient.get<T>(<url>, { observe: 'response' }).subscribe(res => {
    console.log(res.status); // <-- status code
});

Кроме того, вы можете использовать angular HttpInterceptor, если вы пытаетесь выполнить какой-либо тип обработки ошибок на основе вашего ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...