如何解决Angular Http 错误未与 Micronaut HttpResponse.serverError() 映射
我有一个下面的 HTTP 客户端可以与 Micronaut API 通信
this.httpClient.request<T>(new HttpRequest(method,destinationUrl,options)).subscribe(
(response: any) => {
const responsTye = response as HttpEvent<any>
switch (responsTye.type) {
case HttpEventType.Sent:
this.logger.info('Http Client : Sent ->','Request sent!');
break;
case HttpEventType.ResponseHeader:
this.logger.info('Http Client : ResponseHeader ->','Response header received!');
break;
case HttpEventType.DownloadProgress:
const kbLoaded = Math.round(responsTye.loaded / 1024);
this.logger.info('Http Client : DownloadProgress ->',`Download in progress! ${kbLoaded}Kb loaded`);
break;
case HttpEventType.Response:
observer.next(response.body);
this.logger.info('Http Client : Response -> ? Done!',responsTye.body);
}
},(error) => {
switch (error.status) {
case HttpStatusCode.FORBIDDEN:
this.isHttpError = true;
break;
case HttpStatusCode.BAD_REQUEST:
this.isHttpError = true;
break;
case HttpStatusCode.UNAUTHORIZED:
this.isHttpError = true;
break;
case HttpStatusCode.INTERNAL_SERVER_ERROR:
this.isHttpError = true;
break;
}
observer.error(error);
}
现在从后端服务器响应 500 内部服务器错误,如果后面有什么东西坏了
@Fallback
@Retryable(attempts = "3")
public class CategoryClientFallback implements ICategoryOperation{
@Override
public Maybe<?> get(CategorySearchCriteria searchCriteria) {
return Maybe.just(HttpResponse.serverError(ConstantValues.TAG_FALLBACK));
}
}
服务器正在响应 500 内部服务器错误,我们也可以在 POSTMAN 中看到
前端调试,响应和POSTMAN一样
但是,如果出现 500 内部服务器错误,HTTP 客户端应该重定向到错误部分,而不是 (response: any) 部分。
我无法理解的错误是来自后端还是 Angular HTTP 客户端的错误?
export class HttpFalconInterceptor implements HttpInterceptor {
constructor(public authService: AuthService,private logger: LoggerService) { }
intercept(request: HttpRequest<any>,next: HttpHandler): Observable<HttpEvent<any>> {
// Get the auth token from the service.
const authToken = this.authService.getAuthorizationHeaderValue();
this.logger.info("Auth bearer token ",authToken);
if (authToken) {
request = request.clone({
setHeaders: {
'Content-Type': 'application/json',Authorization: authToken
}
});
}
/**
* continues request execution
*/
return next.handle(request).pipe(catchError((error,caught) => {
//intercept the respons error and displace it to the console
this.logger.error(error);
return of(error);
}) as any);
}
}
解决方法
我的拦截器有问题
这就是问题
return next.handle(request).pipe(catchError((error,caught) => {
//intercept the respons error and displace it to the console
this.logger.error(error);
return of(error);
}) as any);
改为
return next.handle(request)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。