Angular-如何在没有响应的情况下订阅http服务

Angular-如何在没有响应的情况下订阅http服务,angular,Angular,我试图在angular 7中创建一个登录组件。我已经为注册和登录创建了所有必要的服务,它们正在工作。但是我还想处理在数据库中找不到userid/email的情况,并在客户端显示消息 login.component.html user.service.ts 当我输入有效的用户“电子邮件:”时,它工作正常user@test.com并在控制台上打印找到的响应,但当我输入数据库中不存在的无效用户时,不会打印找不到的响应,如电子邮件:notauser@test.com“ 当服务没有响应时,它看起来不会出现

我试图在angular 7中创建一个登录组件。我已经为注册和登录创建了所有必要的服务,它们正在工作。但是我还想处理在数据库中找不到userid/email的情况,并在客户端显示消息

login.component.html

user.service.ts

当我输入有效的用户
“电子邮件:”时,它工作正常user@test.com
并在控制台上打印
找到的响应
,但当我输入数据库中不存在的无效用户时,不会打印
找不到的响应
,如
电子邮件:notauser@test.com“

当服务没有响应时,它看起来不会出现在其他部分,并相应地更改this.invalidLogin。请建议如何处理这个案件


感谢

hi error不是subscribe函数的其他部分,当服务器端发生异常或服务器发送错误或internet连接问题时,它会触发此错误 若要处理此问题,必须从服务器发送数据。e、 g如果发现电子邮件,则发送真值服务器,然后签入订阅 您已从服务器isEmailFound签入SUB函数发送值

return this.usersrv.login(user)
       .subscribe(res => {
           console.log('response found');
           this.invalidLogin = res.isEmailFound;
           },
           err => {
           console.log('something went wrong')
           this.invalidLogin = false;
           });

}

hi error不是subscribe功能的其他部分,当服务器端发生异常或服务器发送错误或internet连接问题时,它会触发hi error 若要处理此问题,必须从服务器发送数据。e、 g如果发现电子邮件,则发送真值服务器,然后签入订阅 您已从服务器isEmailFound签入SUB函数发送值

return this.usersrv.login(user)
       .subscribe(res => {
           console.log('response found');
           this.invalidLogin = res.isEmailFound;
           },
           err => {
           console.log('something went wrong')
           this.invalidLogin = false;
           });

}有两种解决方案

在第一种方法中,如果用户无效,您可以从服务器端抛出异常。在这种情况下,以下代码起作用

    return this.usersrv.login(user)
           .subscribe(res => {
               console.log('response found');
               this.invalidLogin = false;
               },
               err => {
               console.log('response not found')
               this.invalidLogin = true;
               });
  }
在第二种情况下,在服务器端引发异常,但状态代码设置为401(未授权)。在这种情况下,代码中有一些更改。您的服务应该如下所示

login(user){
    return this.http.post(`${this.url}/login`, user,{observe: 'response'})  
  }

login.component.ts

  constructor(private usersrv: UsersService) {}

  onLogin() {
      const user:UserDetails = { 
        userid: "user",       
        email: "user@test.com",
        password: "123"     
      }  
      return this.usersrv.login(user)
             .subscribe(res => {
                 if(res.status==200){
                 console.log('response found');
                 this.invalidLogin = false;
                 } 
                 else{
                   console.log('response not found')
                   this.invalidLogin = true;
                 }
                 //status code should be 401 for unauthorized user
                 });
    }

对于未经授权的用户,状态代码应为401。上述else子句是通用的

有两种解决方案

在第一种方法中,如果用户无效,您可以从服务器端抛出异常。在这种情况下,以下代码起作用

    return this.usersrv.login(user)
           .subscribe(res => {
               console.log('response found');
               this.invalidLogin = false;
               },
               err => {
               console.log('response not found')
               this.invalidLogin = true;
               });
  }
在第二种情况下,在服务器端引发异常,但状态代码设置为401(未授权)。在这种情况下,代码中有一些更改。您的服务应该如下所示

login(user){
    return this.http.post(`${this.url}/login`, user,{observe: 'response'})  
  }

login.component.ts

  constructor(private usersrv: UsersService) {}

  onLogin() {
      const user:UserDetails = { 
        userid: "user",       
        email: "user@test.com",
        password: "123"     
      }  
      return this.usersrv.login(user)
             .subscribe(res => {
                 if(res.status==200){
                 console.log('response found');
                 this.invalidLogin = false;
                 } 
                 else{
                   console.log('response not found')
                   this.invalidLogin = true;
                 }
                 //status code should be 401 for unauthorized user
                 });
    }

对于未经授权的用户,状态代码应为401。上述else条款是一个通用条款

您好,我只想知道何时登录无效,然后您是否获得200状态码或其他状态码,如400等。您好,我只想知道何时登录无效,然后您是否获得200状态码或其他状态码,如400等。谢谢@Faizal。你给了解决方案很大的机会。我用你的答案解决了这个问题。在findone命令的其他部分中,我还必须从路由(用于服务)发送响应。User.findOne({email:req.body.email},(err,result)=>{if(result){…}else{return res.status(200).json({message:'usernotfound'});在component.ts中,检查响应中的“message”。谢谢@Faizal。您为解决方案提供了大量线索。使用您的答案,我解决了问题。我还必须从路由发送响应(在服务中使用),在findone命令的else部分.User.findone({email:req.body.email},(err,result)=>{if(result){…}else{return res.status(200).json({message:'usernotfound'});在component.ts中,检查响应中的“message”。