Проверка переменной успеха из маршрутов и сравнение ее в Angular - PullRequest
0 голосов
/ 09 октября 2018

Я создаю стековое приложение MEAN и регистрирую пользователей.В rout.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 true, и вывести сообщение Flash , но яполучаю странную ошибку

Свойство 'success' не существует при типе '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']);
  }

})

Это мой сервис класс

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

logs

1 Ответ

0 голосов
/ 09 октября 2018

Это ошибка компилятора машинописного текста из-за статических проверок безопасности типов.Вы можете сообщить компилятору, что не требуется статическая проверка типов, используя ключевое слово any, как показано ниже.

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

Необходимы скобки, так как в противном случае компилятор предполагает, что any является типом возвращаемых данных.

Приложение все еще работает, так как JavaScript является динамическим языком, свойства ищутся во время выполнения, и среда выполнения может успешно искать свойство success.Компилятор TypeScript удаляет все аннотации типов при компиляции TypeScript в JavaScript.Вы можете увидеть, как работает компилятор машинописи здесь

...