- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我向服务器发送了post
请求以创建用户。如果服务器响应错误,我想从ErrorHandler
获取我提交(附加到该请求)的正文(窗体)。这样做的原因是,例如,当“创建用户”失败时,我想显示一个通知,其中包含从表单中获取的一些详细信息,以及一个按钮,用于将您重定向回各自的页面,并使用检索到的字段再次填充字段形成。
这是我的ErrorHandler
的样子:
@Injectable()
export class ErrorsHandler implements ErrorHandler {
constructor(
private injector: Injector,
) { }
handleError(error: Error | HttpErrorResponse) {
const errorsService = this.injector.get(ErrorsService);
const router = this.injector.get(Router);
const zone = this.injector.get(NgZone);
if (error instanceof HttpErrorResponse) {
// Server error happened
if (!navigator.onLine) {
return console.log('No Internet Connection.');
}
else if (error.status === HttpStatus.UNAUTHORIZED) {
console.log('ErrorsHandler handled HttpStatus Unauthorized. Navigating back to \'/login\' page.');
zone.run(() => router.navigate(['/login']));
}
else {
// Http Error
//How do I get the form from here? I need it for user notification.
return console.log('%c SERVER ERROR ', 'background: #222; color: #ff6961 ; font-size: 15px; border: 2px solid #ff6961;', error);
}
} else {
// Client Error Happend
// Send the error to the server and then
// redirect the user to the page with all the info
errorsService
.log(error)
.subscribe(errorWithContextInfo => {
router.navigate(['/error'], { queryParams: errorWithContextInfo });
});
}
}
}
最佳答案
我认为从HttpErrorResponse实例获取主体是不可能的,因为它扩展了HttpResponseBase,而后者没有正常的HttpResponse那样具有body属性。
export declare class HttpErrorResponse extends HttpResponseBase implements Error {
readonly name: string;
readonly message: string;
readonly error: any | null;
/**
* Errors are never okay, even when the status code is in the 2xx success range.
*/
readonly ok: boolean;
constructor(init: {
error?: any;
headers?: HttpHeaders;
status?: number;
statusText?: string;
url?: string;
});
}
import { Injectable } from '@angular/core';
import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import { ResponseBusiness } from '../Models/General/ResponseBusiness.model';
import { MsgService } from '../services/msg.service';
import { AlertService } from '../services/alert.service';
@Injectable()
export class ResponseInterceptor implements HttpInterceptor {
constructor(private _msg: MsgService, private _alertService: AlertService) {
}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req).map(resp => {
const response = <HttpResponse<ResponseBusiness<Object>>> resp;
if (resp instanceof HttpResponse) {
}
/* do whatever you need with the req.body */
if (resp instanceof HttpErrorResponse) {
const body = JSON.parse(req.body);
if (body && body.avoidMsg) {
return resp;
}
}
if (response.status === 200 && !response.body.result.status) {
this._msg.setMsg({message: `${response.body.result.codeNumber} ${response.body.result.codeDescription}`, tipo: 'error'});
}
return resp;
});
}
}
providers: [
{provide: HTTP_INTERCEPTORS, useClass: ResponseInterceptor, multi: true}],
关于angular - 如何从HttpErrorResponse获取请求的正文/内容? [Angular ErrorHandler],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53292267/
我目前正在学习 Angular 7(没有使用过任何以前的版本)并且在为服务编写单元测试时遇到了我无法修复的问题。 我有一项服务可以从 REST 获取 JSON 并将其解析为一个类。引用 Angular
每次登录失败时,我都试图将用户重定向到登录页面。我设置了一个拦截器来处理 Http 响应: export class HttpInterceptor implements HttpIntercepto
我有一个小问题,我不知道,当用户输入错误的密码时,如何在我的 view.html 中传递错误消息。 问题已解决 login.component.ts export class LoginCompone
我是 angular2 的新手,现在我使用拦截器从服务器获取响应 当我返回 401 错误时,我的 java 服务器代码如下: // httpServletResponse's type is Http
我一直在尝试使用以下代码从本地数据库中删除一个项目。不幸的是无法删除项目,但出现 420 错误。请问高手是什么问题? data.services.ts deleteDiscipline(id: num
我有一个 Angular 6 客户端使用使用 .Net Web Api 开发的 REST Api。 除错误处理外,一切正常。当我尝试处理错误以对不同的状态代码(404、403、409、500 ...)
所以当前端有错误请求时,后端Server会返回不同的状态码和HttpErrorResponse;我已经意识到最好的管理方法是在 Ionic 4/Angular 7 设置中使用拦截器。 我已经尝试过几次
显然 throwError(error)现在已弃用。 VS Code 的 IntelliSense 建议 throwError(() => new Error('error') . new Error
通过我的 Angular 6 客户端,我访问 http://localhost:8082/login 发送用户名和密码并返回一个 token 。这是错误请注意,在 error: 下有我想要的 toke
我有一个 ASP.NET Web API。我正在使用 Angular 4 来做一个简单的 http 请求: getInfo(url: string) { this.http.get(url).
我有一个带有 node.js 的 Angular 项目后端,当我的服务器关闭或没有响应时,如何调用并获取 httpErrorResponse 状态或 header 以显示在我的组件页面中。 这是我的组
Spring-boot RESTful 服务器端;一个将返回字符串的测试方法: @RequestMapping(value = "test", method = RequestMethod.GET)
在 Angular 中,有一种常见的方法可以通过使用 HttpErrorResponse 来处理 http 错误吗?这是真的吗? 我想知道的第二件事是我应该在哪里使用它,是在我进行 API 调用的服务
我在我的 Angular 应用程序中创建了一个 REST API 调用,用于下载文件。 我正在将 responseType 设置为“blob”,因为我需要一个文件作为响应。 但是当服务器上没有可用文件
我有一个 angular 7 应用程序 POST-ing 一个 excel 文件并期望从我的 Express 服务器返回一个 excel 文件,如下所示: myAngular.service.ts c
为什么会抛出错误? deleteUser(userId: string) { this.dataService.deleteUser(userId).subscribe((response:
我正在尝试使用此处列出的 ErrorHandler 全局处理 Angular 错误:https://medium.com/@aleixsuau/error-handling-angular-859d5
我的 API 调用有时会出现此错误: HttpErrorResponse {headers: HttpHeaders, status: 0, statusText: "Unknown Error",
我通过 FormData 将一个文件从 Angular 5.xx 上传到 Jersey 1.xx。 数据已成功接收并保存在我的服务器应用程序目录中,但浏览器显示图片中的这一行(Chrome 和 Fir
我正在发布一个请求,并且我想收到一个“成功”字符串作为响应。我收到一个 HttpResponseError,其中包含下图中发布的以下信息。 采购订单服务 postPurchaseOrderCustom
我是一名优秀的程序员,十分优秀!