Http Rest Call Error Handling

Hi Guys,
I need to manage my http rest errors. My service return HTTP Error 500 and I can’t handle the error.

My Code:

 myCall() {
         var response = this.http.post(url, data)
			.map(res => res.json())
			.catch(this.handleError);
        return response;
    }

    handleError(error) {
		...
    }

handleError never called. Why?

Regards

1 Like

Actually I have the same issue with you before. Please ensure that you already import the following rxjs:

import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';

Also we can do something complex error handling like below, I get it from this discussion.

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

And another guide will help you is from angulardocs.
Hope it help.

2 Likes

thanks, but I need to parse my response when server return 500. My response payload includes several information that I need to show into alert. How can I parse my error response body?

Regards,
Luca

Typically error responses are structurally identical to success responses, so you can call the same json() method on them. If you want to be certain, check that the response instanceof Response.

Service.ts
registerTeam(teamName, password) {
        var url = "...";
        return this.http.get(url)
            .map(res => res.json())
            .catch(error => error.json());
    }
Component.ts
this.service.registerTeam(teamName, password)
                .subscribe((response: any) => {
                    console.log(response);
                    ...
                },
                err => {
                    console.log(err);
                    ...
                })

Error:
TypeError: unknown type returned
at Object.subscribeToResult (subscribeToResult.js:69)
at CatchSubscriber.error (catch.js:60)
at MapSubscriber.Subscriber._error (Subscriber.js:128)
at MapSubscriber.Subscriber.error (Subscriber.js:102)
at XMLHttpRequest.onLoad (xhr_backend.js:77)
at t.invokeTask (polyfills.js:3)
at Object.onInvokeTask (ng_zone.js:227)
at t.invokeTask (polyfills.js:3)
at e.runTask (polyfills.js:3)
at XMLHttpRequest.invoke (polyfills.js:3)

2 Likes

You don’t seem to be returning an Observable out of catch. Does this work?

.catch(err => Observable.of(err.json()))
1 Like

Perfect. Thankssssss