错误处理在 angular 6 中不起作用
Error handling not working in angular 6
我是 Angular 的新手,使用此解决方案根据我的模型生成实体和服务。
其中一个生成的方法正在执行 post 请求以记录我的用户并且请求已发送。
但是当我从我的 API 中收到类似 Bad credentials
的错误时,该错误未得到处理并且我在我的 angular 应用程序上收到运行时错误,并且控制台显示像这样的错误:
Http failure response for http://my-api.com/api/user/login: ErrorCode
这是我的代码:
/**
* Log a user by its credentials.
*/
login(username : string, password : string) : Observable<NmUser> {
let body = JSON.stringify({
'username': username,
'password': password
});
console.log(body);
return this.http.post(this.userUrl + 'login', body, httpOptions)
.pipe(
map(response => new NmUser(response)),
catchError(this.handleError)
);
}
// sample method from angular doc
private handleError (error: HttpErrorResponse) {
// TODO: seems we cannot use messageService from here...
let errMsg = (error.message) ? error.message : 'Server error';
console.error(errMsg);
if (error.status === 401 ) {
window.location.href = '/';
}
return Observable.throw(errMsg);
}
我做错了什么?欢迎任何帮助。
谢谢!
errorHandler()
方法正在抛出从后端检索到的错误。
这一行
return Observable.throw(errMsg);
我猜你在 Observable
订阅中没有正确处理它。这就是它显示在浏览器控制台上的原因
您可以这样处理组件中的错误:
this.service.login(username, password)
.subscribe(data => {},
error => {
// redirect to some error component
})
在您的代码中的某个时刻,您必须停止 Observable.throw
链,否则它会显示在控制台中。
我是 Angular 的新手,使用此解决方案根据我的模型生成实体和服务。
其中一个生成的方法正在执行 post 请求以记录我的用户并且请求已发送。
但是当我从我的 API 中收到类似 Bad credentials
的错误时,该错误未得到处理并且我在我的 angular 应用程序上收到运行时错误,并且控制台显示像这样的错误:
Http failure response for http://my-api.com/api/user/login: ErrorCode
这是我的代码:
/**
* Log a user by its credentials.
*/
login(username : string, password : string) : Observable<NmUser> {
let body = JSON.stringify({
'username': username,
'password': password
});
console.log(body);
return this.http.post(this.userUrl + 'login', body, httpOptions)
.pipe(
map(response => new NmUser(response)),
catchError(this.handleError)
);
}
// sample method from angular doc
private handleError (error: HttpErrorResponse) {
// TODO: seems we cannot use messageService from here...
let errMsg = (error.message) ? error.message : 'Server error';
console.error(errMsg);
if (error.status === 401 ) {
window.location.href = '/';
}
return Observable.throw(errMsg);
}
我做错了什么?欢迎任何帮助。
谢谢!
errorHandler()
方法正在抛出从后端检索到的错误。
这一行
return Observable.throw(errMsg);
我猜你在 Observable
订阅中没有正确处理它。这就是它显示在浏览器控制台上的原因
您可以这样处理组件中的错误:
this.service.login(username, password)
.subscribe(data => {},
error => {
// redirect to some error component
})
在您的代码中的某个时刻,您必须停止 Observable.throw
链,否则它会显示在控制台中。