我是全栈开发的新手。我从小型MEAN应用程序开始,我面临以下问题:
//register user
this.authservice.registerUser(newUser).subscribe(data =>{
if(data.success){
this.flashmessage.show('You are now register and can log in', {cssClass: 'alert-success', timeout: 3000});
this.router.navigate(['/login']);
}
else{
this.flashmessage.show('Something went wwrong', {cssClass: 'alert-danger', timeout: 3000});
this.router.navigate(['/register']);
}
});
我在注册按钮的(click)
上调用了这个函数,数据成功进入数据库,如果我在Angular之外手动执行后端API,我认为它是有效的。但在Angular中,此函数进入else
并显示错误消息,即使成功插入后也是如此。
有人可以告诉我究竟是哪个问题?
答案 0 :(得分:0)
如果出现问题,订阅observable并执行某些代码的正确方法是:
this.authservice.registerUser(newUser).subscribe(data => {
this.flashmessage.show('You are now register and can log in', {cssClass: 'alert-success', timeout: 3000});
this.router.navigate(['/login']);
},
error => {
this.flashmessage.show('Something went wrong: ' + error, {cssClass: 'alert-danger', timeout: 3000});
this.router.navigate(['/register']);
});
原因是subscribe
函数的第一个参数仅在您的请求满意时执行(因此如果成功与否则无需验证其内部,我们知道它成功了)。要在请求不成功时执行某些操作,请使用第二个函数,作为第二个参数传递给subscribe
。
此外,如果下次要调试问题,请使用以下命令检查变量:console.log("my_var:", my_var)
,它将在浏览器的控制台中打印变量my_var
的所有内容。如果您使用的是Chrome,请打开开发工具(按F12)以显示控制台。