Estoy siguiendo un par de tutoriales de Udemy en línea link1 link2 que crean un archivo de interceptor de errores Angular en el lado del cliente. Estoy tratando de entender cómo y cuándo vería una declaración dentro de este archivo que se ve así con un error anidado.
if (error.status === 400) { if (error.error.errors) { // not sure why we would have a nested error inside error throw error.error; } else { this.alertService.danger(error.error.message); } }Aquí está el archivo completo
@Injectable() export class ErrorInterceptor implements HttpInterceptor { constructor(private router: Router, private alertService: AlertService) {} intercept(req: HttpRequest < any > , next: HttpHandler): Observable < HttpEvent < any >> { return next.handle(req).pipe( catchError(error => { if (error) { if (error.status === 400) { if (error.error.errors) { // not sure why we would have a nested error? throw error.error; } else { this.alertService.danger(error.error.message); } } if (error.status === 401) { this.alertService.danger(error.error.message); } if (error.status === 404) { this.router.navigateByUrl('/not-found'); } if (error.status === 500) { const navigationExtras: NavigationExtras = { state: { error: error.error } }; this.router.navigateByUrl('/server-error', navigationExtras); } } return throwError(error); }) ); } }En el extremo del servidor .Net, tengo controladores que devuelven declaraciones en su mayoría como esta:
return NotFound("Some message"); return BadRequest("Some message"); return Unauthorized("Some message"); return Ok();Revisé el código de la API, así que cuando la API devuelva esta respuesta (como contenido del cuerpo)
{ errors: [], message: "" }pero no (que mi comentario fue incorrecto) :
{ error: { errors: [], message: "" } } para casos de error/excepción. Entonces, el error adicional no proviene de la respuesta de la API.
Referencia: ExceptionMiddleware
Creo que el error es HttpErrorResponse . Y tiene el atributo de error .
class HttpErrorResponse extends HttpResponseBase implements Error { constructor(init: { error?: any; headers?: HttpHeaders; status?: number; statusText?: string; url?: string; }) name: 'HttpErrorResponse' message: string error: any | null ok: false // inherited from common/http/HttpResponseBase constructor(init: { headers?: HttpHeaders; status?: number; statusText?: string; url?: string; }, defaultStatus: number = 200, defaultStatusText: string = 'OK') headers: HttpHeaders status: number statusText: string url: string | null ok: boolean type: HttpEventType.Response | HttpEventType.ResponseHeader }Por lo tanto, para obtener el cuerpo del error , necesita:
error.error