일부 API 호출을 수행 할 Angular 2 앱을 구현하고 있습니다. 어쨌든 일반 오류 처리기를 만들 수 있는지 궁금합니다. 예를 들어 API가 401 코드로 응답하면 사용자를 로그인 경로로 리디렉션하고 싶습니다. 이것이 가능합니까?
감사
모든 서비스에서 사용하는 http 도우미 메서드를 만들었습니다. 적어도 애플리케이션을 통해 모든 http 활동을 중앙 집중화합니다.
오류 세부 정보를 처리하는 것은 때때로-여기 내 질문을 참조하십시오 : Angular 2 http 서비스. 자세한 오류 정보 얻기
UPD : 2016-09-12- 고정 remove
방법. Angular http 서비스를 사용하려면 본문을 정의해야합니다. 이 메서드가 존재하는 이유는 delete
요청 의 일부로 본문을 전달할 수 있기를 원했고 Angular의 메서드는이를 허용하지 않습니다.
import {Injectable} from '@angular/core';
import {Http, Request, Response, Headers, RequestOptionsArgs, RequestMethod} from "@angular/http";
import {RequestArgs} from "@angular/http/src/interfaces";
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';
@Injectable()
export class JsonHttpHelper {
protected headers: Headers;
constructor(private _http: Http) {
this.headers = new Headers();
this.headers.append('Content-Type', 'application/json');
this.headers.append('Accept', 'application/json');
}
get(url:string) : Observable<any> {
return this._http.get(url)
.map((res: Response) => res.json())
.catch(this.handleError);
}
post(url:string, data:any, args?: RequestOptionsArgs) : Observable<any> {
if (args == null) args = {};
if (args.headers === undefined) args.headers = this.headers;
return this._http.post(url, JSON.stringify(data), args)
.map((res: Response) => JsonHttpHelper.json(res))
.catch(this.handleError);
}
put(url:string, data:any, args?: RequestOptionsArgs) : Observable<any> {
if (args == null) args = {};
if (args.headers === undefined) args.headers = this.headers;
return this._http.put(url, JSON.stringify(data), args)
.map((res: Response) => JsonHttpHelper.json(res))
.catch(this.handleError);
}
remove(url: string, data?: any, args?: RequestOptionsArgs): Observable<any> {
if (args == null) args = {};
args.url = url;
args.method = RequestMethod.Delete;
if (!args.headers) args.headers = this.headers;
args.body = data ? JSON.stringify(data) : null;
return this._http.request(new Request(<RequestArgs>args))
.map((res: Response) => JsonHttpHelper.json(res))
.catch(this.handleError);
}
private static json(res: Response): any {
return res.text() === "" ? res : res.json();
}
private handleError(error:any) {
console.error(error);
return Observable.throw(error);
// The following doesn't work.
// There's no error status at least in case of network errors.
// WHY?!
//
// if ( error === undefined) error = null;
// let errMsg = (error && error.message)
// ? error.message
// : (error && error.status)
// ? `${error.status} - ${error.statusText}`
// : error;
//
// return Observable.throw(errMsg);
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다