2016-08-19 73 views
2

我需要使用HTTP库来检查服务器上是否存在文件。这很简单,我所做的只是调用以下代码:Angular 2,可以忽略Http.get 404

private serverHeadRequest(): Observable<any> { 
     return this.http.head("theFileName.xxx") 
      .map(this.isResponseOkCallBack) 
      .catch(this.handleError); 
    } 

    private isResponseOkCallBack(res: Response) { 
     switch (res.status) { 
      case 404: 
       return false; 
      case 200: 
       return true; 
      default: 
       return false; 
     } 
    } 


    private handleError(error: any) { 
     let errMsg = (error.message) ? error.message : 
      error.status ? `${error.status} - ${error.statusText}` : 'Server error'; 
     console.error(errMsg); // log to console instead 
     return Observable.throw(errMsg); 
    } 

如果响应是200,那么代码运行良好。不过,我想简单地在任何其他类型的响应代码上返回false。

我试过这个作为替代的错误处理程序,我认为如果出现错误就会返回错误,但这不起作用。

private handleError(error: any) { 
     return Observable.create() 
      .map({ 
       return false; 
       }); 
    } 

我该如何得到这个工作?有没有办法忽略某些状态码?

非常感谢

JT

回答

3

尽量认为你可以这样处理错误:

// import 'rxjs/add/observable/of' 

handleError() { 
    return Observable.of(false); 
} 

另外,还要注意在错误的情况下,浏览器仍然会在控制台打印HEAD <url> 404 (Not Found)。你不应该担心这一点,最重要的是你正确处理它(但返回false)。

+0

是的,这工作。将404打印到控制台很好。虽然这种设计并不理想,但没有可用的服务器端脚本来执行任何处理。只是文本文件。非常感谢您的帮助@dfsq –

1

如果发生错误(在大多数非2xx响应中出现错误),isResponseOkCallBack将不会被调用,因为它跳入.catch()块。

尝试将所有成功的请求映射为true,并将任何错误映射为false。

this.http.head("theFileName.xxx") 
      .map(() => true) // or .map(res => (res.status === 200)) 
      .catch(() => Observable.of(false)); 
+0

这非常好。谢谢! –

0

这是我落得这样做:

serverHeadRequest(): Observable<any> { 
     return this.http.head('someFileName.xxx') 
      .map(this.isResponseOkCallBack) 
      .catch(this.handleHEADError); 
    } 

private isResponseOkCallBack(res: Response) { 
     switch (res.status) { 
      case 404: 
       return false; 
      case 200: 
       return true; 
      default: 
       return false; 
     } 
    } 

private handleHEADError(error: any) { 
     return Observable.of(this.isResponseOkCallBack); 
    } 

你的帮助非常感谢。我很感激。

JT