当用户从后端收到错误时,我试图返回登录页面。所以我的代码如下
authServer.js
app.use('/login', authService.login);
// other code ...
app.use(errorHandler);
function errorHandler (err, req, res, next) {
if (res.headersSent) {
return next(err)
}
if(err.response){
res.redirect("/login");
}
else {
res.status(500)
res.render('error', { error: err })
}
authService.login 方法抛出的错误到达错误处理程序,但没有发生重定向。我也试过 res.redirect(config.get("loginUrl")) 但它似乎不起作用。在几个问题中,它被赋予使用 window.location.href = config.get("loginUrl") 但它抛出错误,因为 window is not defined 。由于 nodejs 不支持窗口。重定向到登录 Url 的正确方法是什么。登录网址将类似于外部网址“http://www.google.com”
更新
建议尝试修改如下
function errorHandler (err, req, res, next) {
if (res.headersSent) {
return next(err)
}
if(err.response){
return res.status(err.response.status).send({ message : err.response.message } )
}
else {
res.status(500)
res.render('error', { error: err })
}
角度服务
getUser() {
this.http.post<User>(url , data).pipe(catchError(this.handleError));
}
handleError(error: HttpErrorResponse) {
let errorMessage = 'Unknown error!';
if (error.error instanceof ErrorEvent) {
// Client-side errors
errorMessage = `Error: ${error.error.message}`;
} else {
// Server-side errors
errorMessage = `Error Code: ${error.status}\nMessage: ${error.message}`;
}
window.alert(errorMessage);
return throwError(errorMessage);
}
user.ts
getUsers() {
this.userService.getUser().subscribe(data=>{
this.user= data
},
error => {
console.log(error) ---> never printed
}
);
}
这是我尝试过的,但似乎根本没有捕获到错误。这是所有问题中建议的解决方案。但是我只能在网络的响应选项卡中看到 json 但从未被捕获为错误并打印在控制台上的事情