Выяснение, почему подписка на сервис Angular 5 возвращает нулевую наблюдаемую - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть следующая сервисная подписка в моем компоненте:

this.userService.loginUser(this.user).subscribe(users => {
  if (users == null) {
    console.log('users is null');
    this.isValid = !this.isValid;
  } else {
    this.userService.subscribers.next(users);
    localStorage.setItem('user', JSON.stringify(users));
    console.log(`User, ${this.user.username}, successfully logged in!`);
    console.log(localStorage.getItem('user'));
    this.router.navigate(['dashboard']);
  }
});

Метод обслуживания выглядит следующим образом:

public loginUser(user: User) {
console.log(`Attempting to login user: ${user.username}`);
const json = JSON.stringify(user);
this.currentUser = user;
return this.http.post<User>(API_URL + 'login', json, HTTP_OPTIONS);

}

Запрос на отправку отправляется на этот метод сервлета Java:

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    System.out.println("login attempt");

    if (req.getInputStream() != null) {
        ObjectMapper mapper = new ObjectMapper();
        User user = mapper.readValue(req.getInputStream(), User.class);
        user = userService.loginUser(user);


        if (user != null) {
            user.setPassword("");
            HttpSession session = req.getSession();
            session.setAttribute("user", user);
        }
    }
}

На стороне Java найдено имя пользователя и пароль, а атрибут сеанса установлен правильно. Тем не менее, на конце Angular «users» имеет значение null, о чем свидетельствует console.log('users is null') в первом блоке кода. Итак, мой вопрос, почему это ноль? Может кто-нибудь, пожалуйста, помогите мне понять механику этого? Мне очень трудно понять, как работают некоторые аспекты Angular ...

1 Ответ

0 голосов
/ 30 апреля 2018

Так что проблема была в том, что в сервлете у меня не было ответа. В конце мне понадобилось

PrintWriter out = resp.getWriter();
out.write(mapper.writeValueAsString(user));
...