无法从Angular服务获取HTTP响应代码

无法从Angular服务获取HTTP响应代码,angular,typescript,django-rest-framework,angular-services,angular4-httpclient,Angular,Typescript,Django Rest Framework,Angular Services,Angular4 Httpclient,在我的项目中,我使用Angular 4作为前端,Django REST框架(DRF)作为后端。从DRF端,我以响应元组的形式返回响应JSON和HTTP响应代码Response(data=vJSON,status=vStatus),从视图函数(如GET/PUT/POST等)返回 问题是,从角度来看,我无法单独提取HTTP响应代码&响应JSON。这是我需要的,因为如果HTTP代码不是200或201,HTTP响应代码可以帮助我在UI端显示错误消息,这是我无法做到的 我只从服务函数返回到组件函数的响应中

在我的项目中,我使用Angular 4作为前端,Django REST框架(DRF)作为后端。从DRF端,我以响应元组的形式返回响应JSON和HTTP响应代码Response(data=vJSON,status=vStatus),从视图函数(如GET/PUT/POST等)返回

问题是,从角度来看,我无法单独提取HTTP响应代码&响应JSON。这是我需要的,因为如果HTTP代码不是200或201,HTTP响应代码可以帮助我在UI端显示错误消息,这是我无法做到的

我只从服务函数返回到组件函数的响应中获取JSON部分。那么,如何分别获取HTTP代码和响应JSON呢

代码如下:-

视图.py

from rest_framework.response import Response
from rest_framework import status
..
..
def get(self, request, format = None):       
   vJSON = {}
   try:
      vHTTPStatus = status.HTTP_200_OK
      # All logics are here
      ..
      ..
   except Exception as e:
      vHTTPStatus = status.HTTP_400_BAD_REQUEST
   finally:          
      return Response(data=vJSON, status=vHTTPStatus)
app.service.ts

import {Observables} from 'rzjs/Observable';
import {HttpClient, HttpParams} from '@angular/common/http';

export class AppService{
  private _URL: string;

  constructor(private _httpConn: HttpClient){
    this._URL = 'http://xx.xx.xx.xxx/8000/myapi/';
  }

  getResponse(pParams){
    return this._httpConn.get(_URL, {params: pParams});
  }
}
app.component.ts[在下面代码中的注释部分,我已经提到了我的要求]

import {AppService} from ./app.service;
import {HttpParams} from '@angular/common/http';

export class AppComponent {

  textAreaValue: string;

  constructor(private _myService: AppService){
    this.textAreaValue = "";
  }

  fetchData(): void{
    let vSearchParam = new HttpParams();
    vSearchParam = vSearchParam.append('id', '1000001');

    this._myService.getResponse(vSearchParam).subscribe(
      response => {
        ..
        /* Here are the logics how to use the response JSON */
        console.log(response);
        ..
        ..
        /* This is what I want 
           if (response.status != 200) {
              this.displayError("There is a connection issue!");
              this.textAreaValue = "Unable to show records!";
           }
           else{
              this.textAreaValue = response.data['value'];
           }
        */            
      }
    );
  }
}

应设置观察值:

因此,在您的服务方法中:

getResponse(pParams){
  return this._httpConn.get(_URL, {params: pParams, observe: 'response'});
}
在您的组件中:

this._myService.getResponse(vSearchParam).subscribe(
  (response: HttpResponse<any>) => {
    console.log(response.status);   
  }
);
this.\u myService.getResponse(vSearchParam).subscribe(
(响应:HttpResponse对象。

您可以找到完整的指南

@jornsharpe谢谢。谢谢@Rhino的帮助和链接。