How to deal with http status codes other than 200 in Angular 2

前端 未结 2 1351
走了就别回头了
走了就别回头了 2020-11-30 23:17

Right now the way I do http requests (borrowed from this answer) is this:

POST(url, data) {
        var headers = new Headers(), authtoken = localStorage.get         


        
2条回答
  •  死守一世寂寞
    2020-12-01 00:17

    Yes you can handle with the catch operator like this and show alert as you want but firstly you have to import Rxjs for the same like this way

    import {Observable} from 'rxjs/Rx';
    
    return this.http.request(new Request(this.requestoptions))
                .map((res: Response) => {
                    if (res) {
                        if (res.status === 201) {
                            return [{ status: res.status, json: res }]
                        }
                        else if (res.status === 200) {
                            return [{ status: res.status, json: res }]
                        }
                    }
                }).catch((error: any) => {
                    if (error.status === 500) {
                        return Observable.throw(new Error(error.status));
                    }
                    else if (error.status === 400) {
                        return Observable.throw(new Error(error.status));
                    }
                    else if (error.status === 409) {
                        return Observable.throw(new Error(error.status));
                    }
                    else if (error.status === 406) {
                        return Observable.throw(new Error(error.status));
                    }
                });
        }
    

    also you can handel error (with err block) that is throw by catch block while .map function,

    like this -

    ...
    .subscribe(res=>{....}
               err => {//handel here});
    

    Update

    as required for any status without checking particluar one you can try this: -

    return this.http.request(new Request(this.requestoptions))
                .map((res: Response) => {
                    if (res) {
                        if (res.status === 201) {
                            return [{ status: res.status, json: res }]
                        }
                        else if (res.status === 200) {
                            return [{ status: res.status, json: res }]
                        }
                    }
                }).catch((error: any) => {
                    if (error.status < 400 ||  error.status ===500) {
                        return Observable.throw(new Error(error.status));
                    }
                })
                .subscribe(res => {...},
                           err => {console.log(err)} );
    

提交回复
热议问题