如何让 Angular HTTP Post 等待节点 js 响应



我是Angular/Node JS的新手,我正在为大学做一个项目,我正在尝试在我的前端和后端实现授权/身份验证。

所以我在 Node JS 中制作了登录方法并使用邮递员测试响应是我想要的。但是当我在 Angular 中发送调用方法登录时,它不会返回任何内容。

使用调试我可以观察到角度不等待 Node JS 的响应,我怎样才能让它只在响应到达时继续?

节点 JS 方法

exports.cliente_login = function (req, res){
let cliente = transform.ToLogin(req);
service.ClienteLogin(cliente, function (cliente, erro) {
if (cliente) {
res.json(cliente);
} else {
return res.send(erro);
}
})

角度服务法

loginCliente(cliente): Observable<Cliente> {
return this.http.post<Cliente>(this.myAppUrl + this.myApiUrl + 'login', JSON.stringify(cliente), this.httpOptions)
.pipe(
retry(1),
catchError(this.errorHandler)
);
}

角度身份验证方法

login(email: string, password: string) {
let user: any;
let userLogin = new UserToLogin();
userLogin.email = email;
userLogin.password = password;
user =  this.clienteService.loginCliente(userLogin);
if (user && user.token) {
// store user details and jwt token in local storage to keep user logged in between page refreshes
localStorage.setItem('currentUser', JSON.stringify(user));
this.currentUserSubject.next(user);
}
return user;
}

感谢您的帮助!

Angular HTTPClient 基于可观察量。该请求仅在您订阅时触发。

login(email: string, password: string) {
let user: any;
let userLogin = new UserToLogin();
userLogin.email = email;
userLogin.password = password;
this.clienteService.loginCliente(userLogin).subscribe(user => {
if (user && user.token) {
// store user details and jwt token in local storage to keep user logged in between page refreshes
localStorage.setItem('currentUser', JSON.stringify(user));
this.currentUserSubject.next(user);
}
});
// You cannot return user here, as it is only available inside your subscribe block which is running asynchronously
// return user;
}

您可能需要订阅 http 输出,因为它是可观察的:

身份验证方法:

login(email: string, password: string) {
let user: any;
let userLogin = new UserToLogin();
userLogin.email = email;
userLogin.password = password;
this.clienteService.loginCliente(userLogin).subscribe((user) => {
if (user && user.token) {
// store user details and jwt token in local storage to keep user logged in between page refreshes
localStorage.setItem('currentUser', JSON.stringify(user));
this.currentUserSubject.next(user);
}
return user;
});
}

最新更新