我是Angular / Node JS的新手,我正在做一个大学项目,试图在前端和后端实现授权/身份验证。
因此,我在Node JS中创建了Login方法,并用邮递员测试了响应,这是我想要的。但是当我发送调用Angular中的方法login时,它不会返回任何内容。
使用调试,我可以观察到角度不等待Node JS的响应,如何使它仅在响应到达时才继续?
Node 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;
}
谢谢您的帮助!
您可能需要订阅您的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;
});
}
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;
}
使用async/await
尝试使用此代码块
async loginCliente(cliente): Observable<Cliente> {
return await this.http.post<Cliente>(this.myAppUrl + this.myApiUrl + 'login', JSON.stringify(cliente), this.httpOptions).toPromise();
}
这将把您的可观察性转化为承诺,然后。您的代码将等待,直到服务器收到响应。