角度HTTP请求问题

时间:2017-12-13 16:32:45

标签: spring angular rest http

我在使用http请求获取用户信息到我的其他api服务器时遇到问题,我不知道出了什么问题....

当用户点击登录按钮时,Angular使用用户名和密码向服务器发送请求,如果正确则返回用户信息,否则返回null。问题是用户服务中的变量用户仍然为null,尽管用户名和密码是正确的。

我不知道如何解决这个问题,所以如果你帮助我,我会很开心!感谢您的帮助。

REST API:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { User } from '../entities/User';

@Injectable()
export class UserService {

  private usersUrl: 'http://localhost:8080/api/users';

  user: User;
  verifyUrl: string;

  constructor(private http: HttpClient) {}

  isLoggedIn() {
    return this.user != null;
  }

  isAdmin() {
    return this.user.isAdmin;
  }

  unLoggin() {
    this.user = null;
  }

  login(username: string, password: string) {
    this.verifyUrl = 'http://localhost:8080/api/users/verify?username=' + username + '&password=' + password;
    this.http.get<User>(this.verifyUrl).subscribe(data => this.user = data);
    if (this.user != null) {
      return true;
    } else {
      return false;
    }
  }

}

用户服务

{{1}}

1 个答案:

答案 0 :(得分:0)

你过早地打电话给if (this.user !== null)。在请求消失之前,将会调用该评估。试试这个:

login(username: string, password: string) {
    this.verifyUrl = `http://localhost:8080/api/users/verify?username=${username}&password=${password}`;
    return this.http.get<User>(this.verifyUrl)
        .map(data => {
            this.user = data
            if (this.user != null) {
               return true;
            } else {
                return false;
            }
        });
}

但事情是,无论你在哪里调用这个login方法,它现在都是你必须订阅的可观察对象,而不是同步方法。