0
인터셉터 코드를 다시 읽을 수 없습니다 :각도 5 로그 인터셉터는 오류가 throwed하지만 함수를 호출하면 오류
import { Injectable } from '@angular/core';
import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpResponse, HttpErrorResponse } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
// import { tap, map, catchError } from 'rxjs/operators';
import 'rxjs/add/observable/throw';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/do';
@Injectable()
export class LogInterceptor implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
console.log(`HTTP: ${req.urlWithParams}`);
return next.handle(req)
.catch((err, caught) => {
console.log(err);
if (err.error instanceof Error) {
// A client-side or network error occurred. Handle it accordingly.
console.log('An error occurred:', err.error.message);
} else {
// The backend returned an unsuccessful response code.
// The response body may contain clues as to what went wrong,
console.log(`Backend returned code ${err.status}, body was: ${err.error.message}`);
}
return Observable.throw(err);
})
.do(event => {
console.log(event);
if (event instanceof HttpResponse) {
console.log(event.body);
}
});
}
}
인터셉터가 작동하지만 오류가 호출하는 함수에 의해 읽을 수없고 항상 null입니다. 캐치 코드가 인터셉터에서 제거
this.http.post<Asset>(`whatever.php`, {}).subscribe(
_data => console.log(data),
_err => console.log(_err) // <- this _err is always NULL
);
경우 함수 호출
는 오류가 돌아왔다. 인터셉터가 일반 처리를 수행하기를 원하지만 필요할 경우 호출 함수가 오류를 처리 할 수도 있습니다. 가능한가?
내 원래의 코드에서 observable.throw을 반환했다. 올바른 코드는 어떻게 공유해야할까요? 고마워! – JeffChan
do 연산자는 성공, 오류 및 완료 콜백 등 3 콜백을 반환하는 가입 연산자와 거의 같습니다. 인터셉터를 구현하는 올바른 방법은 .do (성공 => {}, 오류? => {}, 완료 => {})입니다. 인터셉터에서 Calling 함수가 오류를 catch하도록하려면 do 연산자에 Error 콜백을 전달해야합니다. 요청이 실제로 서버에 도달하기 전에 오류가 발견되어 throw되기 때문에 호출 함수에서 오류를 기록하지 않습니다. 이는 데이터가 null/undefined이기도 함을 의미합니다. 데이터를 얻으면 오류가 없음을 의미하고 연산자가 실행됩니다. –