2016-08-19 4 views
2

サーバー上のファイルの存在を確認するには、HTTPライブラリを使用する必要があります。応答が200、コードがうまく動作している場合角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); 
    } 

:それは私がやっているすべては、次のコードを呼び出している、非常に簡単です。しかし、他のどのような応答コードでもfalseを返すだけです。

エラーが発生した場合は単に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

isResponseOkCallBackは、ほとんどの2xx以外の応答でスローされたときに、.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

関連する問題