我正在使用Angular Http:
this.http
.post(url, JSON.stringify(data), this.createOptions())
.subscribe(response => {
... do something
}, error => {
if (error.status === 400){
...do something
}
else if (error.status === 500) {
...do something else
}
}),
}
问题在于,当我收到400
错误代码时,服务器会在正文中将错误消息作为string
返回给我。但是当响应进入catch
块时,这似乎消失了。服务器响应正确到达,我正在使用Postman进行测试,但是在有角度的情况下,身体会被其他东西替换。如果我使用error.text()
我得到了这个,而不是错误消息:
"_body": {
"__zone_symbol__currentTask": {
"type": "microTask",
"state": "notScheduled",
"source": "Promise.then",
"zone": "angular",
"invoke": "invoke()function () {_numberOfNestedTaskFrames++; try { self.runCount++; return self.zone.runTask(self, this, arguments);\n }\n finally {\n if (_numberOfNestedTaskFrames == 1) {\n drainMicroTaskQueue();\n }\n
_numberOfNestedTaskFrames--;\n }\n }",
"cancelFn": null,
"runCount": 0,
"callback": "callback()function () {\n try {\n resolvePromise(chainPromise, true, zone.run(delegate, undefined,
[promise[symbolValue]]));\n }\n catch (error) {\n resolvePromise(chainPromise, false, error);\n }\n }"
}
},
我做错了什么?
答案 0 :(得分:1)
您错过了.map()
,请尝试以下操作:
this.http.post(url, data, this.createOptions())
.map((res: Response) => res.json())
.subscribe((response: any) => {
... do something
}, (error: any) => {
if (error.status === 400){
...do something
} else if (error.status === 500) {
...do something else
}
}
);
您还需要像这样导入Response
:
import { Response } from '@angular/http';
答案 1 :(得分:0)
我刚碰到这个,当rxjs创建错误对象时,它将原始响应作为您可以访问的属性附加。所以你可以做点像......
(err) => err._body
刚测试过这个,_body
将是响应文本的字符串值