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