繁体   English   中英

Angular 2,Http.get 可以忽略 404

[英]Angular 2, can Http.get ignore 404

我需要使用 HTTP 库来检查服务器上是否存在文件。 这很简单,我所做的就是调用以下代码:

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。

我尝试将此作为替代错误处理程序,我认为如果出现错误,它只会返回 false,但这不起作用。

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

我怎样才能让它工作? 有没有办法忽略某些状态代码?

试着认为你可以处理这样的错误:

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

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

另外请注意,如果出现错误,浏览器仍会在控制台中打印HEAD <url> 404 (Not Found) 你不应该担心这个,最重要的是你正确处理它(但返回false )。

当出现错误(在大多数非 2xx 响应中抛出)时,不会调用isResponseOkCallBack ,因为它会直接跳转到.catch()块。

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

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

这就是我最终做的:

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);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM