当状态代码= 400时,Angular 4 Http缺少响应文本

时间:2017-08-17 18:55:47

标签: angular angular-http

我正在使用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        }"
    }
},

我做错了什么?

2 个答案:

答案 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将是响应文本的字符串值