在Angular的HTTP请求中获取响应类型

时间:2019-01-30 20:15:29

标签: angular

我具有此功能,该功能可通过http从服务器获取blob(以下载文件):

getBlob(data: any) { 
    return this.http.post("theurl", data, 
             {observe: 'response', responseType: 'blob'} ).
        pipe(
          map(response => response)
        );
}

问题是服务器可能返回一个blob,或者如果用户未获得授权(或其他应用程序错误),它将返回一个带有错误消息和错误代码的json

如果HTTP响应类型为blob,我将把blob响应存储为下载文件。如果HTTP响应类型为json,我将获取错误代码和消息并显示给用户。

如何调整此功能以接收blobjson响应类型?如何获取json响应的内容?

3 个答案:

答案 0 :(得分:0)

嗯,这取决于服务器。但首先。此函数/方法不返回blob或json。它返回一个可观察的,因为这是角度的工作方式。当您未登录时,您的服务器应以可以在catch方法中拦截的错误代码响应。

return this.http.post(
  'theurl',
  data,
  {observe: 'response', responseType: 'blob'}
)
.pipe(
  map(response => response)
);
.catch((err) => {
  // Do messaging and error handling here
  return Observable.throw(err)
});

在组件中您可以执行以下操作:

this.myService.myMethod(data).subscribe((res) => {
  console.log(res);
  // some success logic
},
(err) => {
  console.log(err);
  // some errorlogic
});

您还可以尝试从HTTP调用接收的JSON中检查特定密钥,以检查其JSON是否正确。但是我不推荐这种解决方案。

答案 1 :(得分:0)

首先控制台,您将使用可引发消息的方式来了解响应。

   getBlob(data: any) { 
        return this.http.post("theurl", data, 
                 {observe: 'response', responseType: 'blob'} ).
            pipe(
              map(response => response)
            );
        console.log(data)
      if (data['blob'] === 'true'){
       alert("Authorized User")
    }
   else{
      alert("Unauthorized User")
      console.log(data['message']);
}

答案 2 :(得分:0)

这有效:

            response => {
                if (response.body.type == 'application/json') {
                    var reader = new FileReader();
                    reader.onloadend = function(){
                        const parsed: any = JSON.parse(reader.result as string);
                        processJson(parsed);
                    };
                    reader.readAsText(response.body);
                }
                else 
                    processBlob(response.body);
            }