我发送的请求是这样的,
return this.http.post(this.summaryDevicesV2, body, options)
.retry(1)
.map((res: Response) => this.winRef.baseSuccessHandler(res) )
.catch((error: any) => Observable.throw(this.winRef.baseErrorHandler(error)));
在大多数情况下,它处理一切都很好,成功和错误,直到我得到一个HTML响应,然后我得到这个错误。
SyntaxError: Unexpected token < in JSON at position 0,
而不是正确的响应对象。在某些情况下我可能会因为不同的错误情况/原因而得不到json,我想以不同的方式处理这些情况,并且因为获取字符串而无法访问标题和状态代码一个适当的反应对象。有没有办法访问这些属性?
修改
她是我在基本错误处理程序中尝试过的,以处理这种情况。它总是发生在错误场景中,因为服务器实际上正在抛出302重定向,其中包含一些html。我想捕获错误代码,但我无法从错误对象访问任何内容,在这种情况下状态和标头是未定义的。如果我打印出错误,我会看到一个堆栈跟踪。我知道这不是正确的json,但我认为它只会在我调用error.json()时尝试解析json;
try {
console.log("error type", typeof error);
console.log("keys", Object.keys(error) );
let smError = "SyntaxError";
let smError2 = "Unexpected token < in JSON";
error += "";
if(error.indexOf(smError) != -1 && error.indexOf(smError2) != -1){
location.reload();
}
console.log("sm error?", error);
} catch(e) {
;
}
这只是我尝试过的事情之一,因为我似乎无法访问标题或状态代码。
第一个日志说它是类型对象 但该对象没有属性。
在不同的scneairo中,服务器以400响应,返回的密钥就是这样。
"_body"
1
:
"status"
2
:
"ok"
3
:
"statusText"
4
:
"headers"
5
:
"type"
6
:
"url"
当前解决方案:
目前我只是检查响应错误对象中有多少属性,如果低于1,我假设我回到了html重定向。