角4 HTTP状态代码= 400
我采用了棱角分明的Http这样当缺少回应文本:角4 HTTP状态代码= 400
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
}
}),
}
的problema是,当我得到一个400
错误代码,服务器返回我的错误消息一个string
在身体。但是当响应进入catch
块时,这似乎消失了。服务器响应正确到达,我正在用邮差测试它,但是在角度上,身体被替换为其他东西。如果我使用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 }"
}
},
我在做什么错?
我刚碰到这个,当rxjs创建错误对象时,它会将原始响应作为可以访问的属性附加。所以,你可以这样做......
(err) => err._body
刚刚测试过这一点,_body
将响应文本
是的,_body属性存在,但它包含奇怪的JSON对象,而不是响应文本。 – RBasniak
你缺少的.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';
只有当响应代码是'200'时,'map'操作符才会起作用,这与我的问题无关,因为当请求落在错误路径上时,我的问题是访问原始正文内容。 – RBasniak
否。您可以添加'.map()'之后的.catch()'可以捕捉错误,但如果你喜欢的话,只需使用'.map()'就可以工作。你可以在'(error:any)'中找到错误。 '.map()'是必需的 –
我只是重读你的问题,并意识到我的回答是完全无益的,对不起。但是,在测试我的答案时,我碰到了你的问题。我得到那个奇怪的'_body'对象任何时候,我的API没有响应,因为无论是什么原因,像击中一个不存在的端点 – raykrow