Angular 角度2的捕捉误差

Angular 角度2的捕捉误差,angular,try-catch,Angular,Try Catch,我试图捕获http post中的错误,但它显示了以下错误: TypeError:error.json不是函数 我在谷歌上什么也没找到 我在Angular.io站点上遵循了这个示例 我的代码: import {Observable} from 'rxjs/Observable'; // Import RxJs required methods import 'rxjs/add/operator/map'; import 'rxjs/add/operator/catch'; //import

我试图捕获http post中的错误,但它显示了以下错误:

TypeError:error.json不是函数

我在谷歌上什么也没找到

我在Angular.io站点上遵循了这个示例

我的代码:

 import {Observable} from 'rxjs/Observable';

// Import RxJs required methods
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';

//import 'rxjs/add/operator/catch';

@Injectable()
export class EmpresasCrudService {


    constructor(private _http: Http) {
    }

  //  public allItems;
   // public _qtd;

     postHttpEmpresas(endpoint_url, data): Observable<Response> {
         let body = JSON.stringify(data);

         let headers = new Headers({'Accept': 'application/json' });
         headers.append('Content-Type', 'application/json');
         let options = new RequestOptions({ headers: headers });

        return this._http.post(endpoint_url, body, options)
                        .map(res => res.json())
                        .catch(this.handleError);
    }

private handleError (error: Response | any) {
    // In a real world app, we might use a remote logging infrastructure
    let errMsg: string;
    if (error instanceof Response) {
      const body = error.json() || '';
      const err = body.error || JSON.stringify(body);
      errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
    } else {
      errMsg = error.message ? error.message : error.toString();
    }
    console.error(errMsg);
    return Observable.throw(errMsg);
  }
从'rxjs/Observable'导入{Observable};
//导入RxJs所需的方法
导入'rxjs/add/operator/map';
导入“rxjs/add/operator/catch”;
//导入“rxjs/add/operator/catch”;
@可注射()
导出类EmpresasCrudService{
构造函数(私有的http:http){
}
//公共联盟;
//公共(qtd),;
postHttpEmpresas(端点url,数据):可观察{
让body=JSON.stringify(数据);
let headers=新的头({'Accept':'application/json'});
headers.append('Content-Type','application/json');
let options=newrequestoptions({headers:headers});
返回此。_http.post(端点\u url、正文、选项)
.map(res=>res.json())
.接住(这个.把手错误);
}
私有句柄错误(错误:响应|任意){
//在现实世界的应用程序中,我们可能会使用远程日志记录基础设施
让errMsg:string;
if(响应的错误实例){
const body=error.json();
const err=body.error | | JSON.stringify(body);
errMsg=`${error.status}-${error.statusText | |'''}${err}`;
}否则{
errMsg=error.message?error.message:error.toString();
}
控制台错误(errMsg);
返回可观察抛出(errMsg);
}
编辑: 当我提出:

postHttpEmpresas(endpoint_url, data): Observable<Response> {
         let body = JSON.stringify(data);

         let headers = new Headers({'Accept': 'application/json' });
         headers.append('Content-Type', 'application/json');
         let options = new RequestOptions({ headers: headers });

        return this._http.post(endpoint_url, body, options)
                        .map(res => res.json())
                        .catch(err => this.handleError(err));
    }

private handleError (error: Response | any) {
    // In a real world app, we might use a remote logging infrastructure
    let errMsg: string;
    if (error instanceof Response) {
    try {
        errMsg = error.json();
    } catch (e) {
        // No content response..
        errMsg = null;
    }
}
    console.log(errMsg);
    return Observable.throw(errMsg);
  }
postHttpEmpresas(端点url,数据):可观察{
让body=JSON.stringify(数据);
let headers=新的头({'Accept':'application/json'});
headers.append('Content-Type','application/json');
let options=newrequestoptions({headers:headers});
返回此。_http.post(端点\u url、正文、选项)
.map(res=>res.json())
.catch(err=>this.handleError(err));
}
私有句柄错误(错误:响应|任意){
//在现实世界的应用程序中,我们可能会使用远程日志记录基础设施
让errMsg:string;
if(响应的错误实例){
试一试{
errMsg=error.json();
}捕获(e){
//没有内容响应。。
errMsg=null;
}
}
console.log(errMsg);
返回可观察抛出(errMsg);
}
它在console.log中显示错误,但在给我一个错误之前:

如果响应没有正文,调用
响应#json()
将抛出错误(例如,状态204-无内容响应)。如果您不知道错误响应是否有正文,可以尝试/捕获提取响应内容,如下所示:

if (error instanceof Response) {
    try {
        body = error.json();
    } catch (e) {
        // No content response..
        body = null;
    }
}

我用你的答案编辑了我的问题…我不知道我是否做对了是的,这就是我所指的概念。你仍然看到你的错误吗?顺便说一句,你不应该更新你的原始问题,你能返回原始问题以便为未来的用户保留原始上下文吗?还有,error.json()将返回一个body对象,我想您需要这样的内容:let mssg=error.json().error;,或者:let mssg=error.json().errorMessage;?我将这两种方式放在一起,并且,error:TypeError:error.json不是SafeSubscriber的函数。\u error(empresas create.component.ts:300)在SafeSubscriber上。\u tryOrUnsub(Subscriber.js:223)订阅服务器的SafeSubscriber.error(Subscriber.js:184)订阅服务器的CatchSubscriber.error(Subscriber.js:102)订阅服务器的CatchSubscriber.error(catch.js:55)订阅服务器的SafeSubscriber.error(Subscriber.js:128)订阅服务器的XMLHttpRequest.onLoad(xhr\u backend.js:77)在ZoneDelegate.invokeTask(zone.js:265),我不知道该怎么办