我使用以下代码记录服务的错误消息:
[... snip ...]
private handleError (error: Response | any) {
let errMsg: string;
if (error instanceof Response) {
const body = error.json() || '';
const err = body.error || JSON.stringify(body);
errMsg = `${error.status} - ${error.statusText} - ${error.statusText || ''} ${err}`;
} else {
errMsg = error.message ? error.message : error.toString();
}
console.error(errMsg);
return Observable.throw(errMsg);
}
adminLogin(username, password): Observable<any> {
let url = `${this._apiRoot}/login`;
let tokenResp = {};
return this.http.post(url, JSON.stringify({ username: username, password: password }), { observe: 'response' })
.map((response: HttpResponse<any>) => {
let token = response.headers.get("Authorization");
let t = JWT(token);
return t;
})
.catch(this.handleError);
}
[... snip ...]
查看Chrome网络标签页(执行POST后),我在网络中看到以下Response
的一部分:
{ “时间戳”:1518704916793, “状态”:401, “错误”: “未授权”, “消息”:“认证 失败:凭据错误“,”路径“:”/ login“}
我正在尝试将未经授权和“身份验证失败:凭据错误显示为错误消息的一部分;但是,我不知道这是怎么回事使用Response
对象访问。
如何访问此信息?
TIA
更新
感谢您提供的信息。我更改了调用函数,如下所示:
onSubmit(userForm: NgForm) {
console.log(userForm);
console.log(" getting ready to go call the service ");
let sendUser = userForm.value.username;
let sendPassword = userForm.value.passwordconf;
console.log(" values for id and password " +
sendUser + " ----- " + sendPassword);
this.authService.adminLogin(sendUser, sendPassword).subscribe((response) => {
[ ... snip ...]
},
( error : any ) => {
console.error( " --- function produced an error ");
console.log( error );
let errMsg = "HTTP Status : " + error.status + " MESSAGE " + error.error.message;
console.error( errMsg );
});
我使用了以下行:
let errMsg = "HTTP Status : " + error.status + " MESSAGE " + error.error.message;
由于我在打印“错误”对象时看到的内容:
问题:这是否足以进行错误处理?似乎(根据Chrome中的“网络”选项卡)错误类型为HttpErrorResponse
是否需要在预期其他错误类型弹出时进行更改?这就是之前使用“功能”的原因。