我正在使用带有 Observable 的 Angular2 POST 请求到 Node API。 我不断收到一个奇怪的 JSON 对象作为响应。
来自 Node 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;
}
附注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
不是您请求的响应,而是可观察的请求。为了接收响应,您需要订阅
。
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
关于node.js - Angular2 POST Observable 请求返回不可读的 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45030702/