Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular2从错误中提取json_Angular_Typescript - Fatal编程技术网

Angular2从错误中提取json

Angular2从错误中提取json,angular,typescript,Angular,Typescript,我正在编写一段Angular2代码,它与服务器交互,服务器返回带有http错误代码(如404或401)的json。 我找不到从错误响应中读取json的方法。 我无法使用.map(),因为没有关于正常响应的数据 return new Promise((resolve, reject: Response) => { this.http.request(new Request(requestoptions)) .subscribe( data

我正在编写一段Angular2代码,它与服务器交互,服务器返回带有http错误代码(如404或401)的json。 我找不到从错误响应中读取json的方法。 我无法使用.map(),因为没有关于正常响应的数据

return new Promise((resolve, reject: Response) => {
      this.http.request(new Request(requestoptions))
          .subscribe(
          data => {resolve()},
          error => { error.json() } //<-- No json()
          )
       };
返回新承诺((解决、拒绝:响应)=>{
this.http.request(新请求(requestoptions))
.订阅(
数据=>{resolve()},

error=>{error.json()}/我通过尝试只解析包含响应的http代码来解决问题。 此示例代码可以帮助其他人:

return new Promise((resolve, reject) => {
  this.httpProvider.login(url, credentials)
    .map(res => {
      //avoid parsing the response from the server for some requests since it's not a valid json
      if (res.status >= 400 && res.status < 500) {
        return res.json();
      }
      else return res;
    })
    .subscribe(
      data => {
      },
      error => {
        switch (error.status) {
          case 400:
          case 401:
            let erromsg: string = this.parseServerError(error);
            reject(erromsg);
            break;
          case 404:
          case 500:
            reject("Server error");
            break;

          default:
            reject("Network Error");
        }
      }
    );
});




parseServerError(error): string {
  try {
    let message = error.json().message[0].description;
    return message;
  } catch (e) {
    return "Undefined error";
  }
}
返回新承诺((解决、拒绝)=>{
this.httpProvider.login(url、凭据)
.map(res=>{
//避免解析服务器对某些请求的响应,因为它不是有效的json
如果(分辨率状态>=400和分辨率状态<500){
返回res.json();
}
否则返回res;
})
.订阅(
数据=>{
},
错误=>{
开关(错误状态){
案例400:
案例401:
让erromg:string=this.parseServerError(错误);
拒绝(MSG);
打破
案例404:
案例500:
拒绝(“服务器错误”);
打破
违约:
拒绝(“网络错误”);
}
}
);
});
parseServerError(错误):字符串{
试一试{
let message=error.json().message[0]。说明;
返回消息;
}捕获(e){
返回“未定义错误”;
}
}

检查Http调用时如何处理错误。try error=>console.log(error),错误对象响应可能不是json对象。api发送代码是什么样子的?错误代码包含json对象(我在浏览器的Http响应中看到了这一点)@ApriOri我也面临着同样的问题:您找到解决方法了吗?