从路由中检查成功变量并在 Angular 中进行比较

Checking success variable from routes and comparing it in Angular

我正在制作 MEAN 堆栈应用程序并且正在注册用户。在 routes.js 中,如果成功添加用户,我将返回一个 JSON 对象。

router.post('/register',(req,res,next)=>{
let newUser= new User({
    name:req.body.name,
    username:req.body.username,
    email:req.body.email,
    password:req.body.password
});

User.addUser(newUser,(err,user)=>{
    if(err)
    {
        res.json({success:false,msg:'Failed to Register User'});
    }
    else
    {
        res.json({success:true,msg:'Registered Sucessfully'});
    }
})})

现在 angular 我想检查是否返回成功 true 并显示 Flash 消息,但我收到一个奇怪的错误

Property 'success' Doesnot Exist On Type 'object'

this.authService.registerUser(user).subscribe(data=>{
  console.log(data);
  if(data.success)   //<---- PROPERTY 'success' DOESNOT EXIST ON TYPE 'object'
  {
    this.flashMessage.show("You are now Registered and Can LogIN",{cssClass:'alert-sucess',timeout:3000});
    this.router.navigate(['/login']);

  }
  else
  {
    this.flashMessage.show("Something Went Wrong",{cssClass:'alert-danger',timeout:3000});
    this.router.navigate(['/register']);
  }

})

这是我的服务class

registerUser(user){
let headers= new HttpHeaders().set('Content-Type','application/json');
return this.http.post('http://localhost:3000/api/register',user,{headers:headers})}

但即使有这条消息,我也能够将用户添加到数据库中。这就是 console.log 返回的内容

由于静态类型安全检查,这是一个打字稿编译器错误。您可以使用 any 关键字通知编译器不需要静态类型检查,如下所示。

this.authService.registerUser(user).subscribe( (data: any) => {
...

需要方括号,否则编译器会假定 any 是 return 数据类型。

应用程序仍然可以工作,因为 JavaScript 是一种动态语言,在运行时查找属性并且运行时能够成功查找 success 属性。 TypeScript 编译器在将 TypeScript 编译为 JavaScript 时会去除所有类型注释。你可以看到打字稿编译器是如何工作的here