Angular2 POST 可观察请求 returns 不可读 JSON 对象

Angular2 POST Observable Request returns a not readable JSON Object

我正在使用 Angular2 POST 对节点 API 的 Observable 请求。 我不断收到一个奇怪的 JSON 对象作为响应。

来自节点 API 应用程序的响应 - 通过 Chrome 控制台:

{"_isScalar":false,"source":{"_isScalar":false,"source":
{"_isScalar":false,"source":{"_isScalar":false},"operator":
{"delay":500,"scheduler":{"actions":[],"active":false}}},"operator":
{}},"operator":{"caught":"[Circular]"}}

Angular2 代码:

login2(): Observable<any> {

    this.url = 'http://localhost:3080/user/login';

    this.obj.email =  'jhon.doe@foo.de';
    this.obj.password = 'pass';

    let formObj = this.form.getRawValue();
    let serializedForm = JSON.stringify(formObj);

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

    var obsRequest = this.http.post(this.url, this.obj, options)
        .map(res => res.json())
        .catch( (error: any) => Observable.throw(error.json().error || 'Server error') );


    console.log(JSON.stringify(obsRequest, this.avoidCircular(obsRequest)));

    return obsRequest;
}

P.S。 avoidCircular 是 javaScript 内置 JSON.stringify 的额外解决方法,因为当我不使用它时会出现以下错误:

TypeError: Converting circular structure to JSON

避免循环代码:

avoidCircular(objCens) {
    var i = 0;
    return function(k, v) {
        if(i !== 0 && typeof(objCens) === 'object' && typeof(v) == 'object' && objCens == v) 
        return '[Circular]'; 
        if(i >= 29) 
        return '[Unknown]';
        ++i; 
        return v;  
    }
}

API 调用通过 Postman 正常工作!

知道如何解决这个问题吗?

obsRequest 不是您请求的响应,它是可观察的请求。您需要 subscribe 才能收到回复。

var obsRequest = this.http.post(this.url, this.obj, options)
        .map(res => res.json())
        .catch( (error: any) => Observable.throw(error.json().error || 'Server error') );

obsRequest.subscribe((response)=> console.log(response));

建议你阅读官方文档的http模块:https://angular.io/guide/http