Как извлечь некоторый атрибут Observable (Http Post-request) с различными типами объектов - PullRequest
0 голосов
/ 21 октября 2019

У меня проблема в следующем:

Я делаю запрос Http Post на странице входа в систему. Поэтому мои входные аргументы - это адрес электронной почты / пароль. Возвращаемый объект имеет следующую структуру:

{
    "user": {
        "level": "admin""_id": "5da89",
        "email": "admin@admin.net",
        "password": "soinggdfgsd",
        "tokens": "17T12:59:04.751Z",
        "__v": 40
    },
    "token": "something"
}

Я хочу получить только некоторые атрибуты первого (пользовательского) объекта, например, уровень, идентификатор ... и токен второго объекта.

Эти значения я хочу сохранить локально.

Может ли кто-нибудь предоставить мне фрагмент кода?

requestLogin(user: User): Observable<any> {
    return this.http.post(`${this.baseUrl}` + 'me/login',
        this.loginUser, this.httpOptions);
}

validateLoginRequest(email: string, password: string): boolean {
    this.loginUser.setEmail(email);
    this.loginUser.setPassword(password);

    this.requestLogin(this.loginUser)
        .pipe(
            tap(data => console.log(JSON.stringify(data)),
                map(objects => objects)


                // Some additional Code
            ))
        .subscribe();
    // ...
}

Ответы [ 2 ]

1 голос
/ 21 октября 2019

Это простой JSON, и вы можете получить доступ к его свойствам следующим образом:

let fooJson = {
  "user": {
      "level": "admin",
       "_id": "5da89",
      "email": "admin@admin.net",
      "password": "soinggdfgsd",
      "tokens": "17T12:59:04.751Z",
      "__v": 40
  },
  "token": "something"
};

console.log(`user is ${fooJson.user.level}`);
console.log(`_id is ${fooJson.user._id}`);
console.log(`email is ${fooJson.user.email}`);
console.log(`password is ${fooJson.user.password}`);
console.log(`tokens is ${fooJson.user.tokens}`);
0 голосов
/ 21 октября 2019

Внутри вашей подписки, просто обработайте значения ответа.

Обратите внимание: Когда сервер отвечает вашим хэшем, паролем или любыми данными, которые использовались в сочетании с вашим паролем, крайне небезопасно (включая зашифрованный пароль). Пожалуйста, рассмотрите возможность удаления этого из вашей полезной нагрузки ответа API.

validateLoginRequest(email: string, password: string): boolean {
    this.loginUser.setEmail(email);
    this.loginUser.setPassword(password);

    this.requestLogin(this.loginUser)
        .pipe(
            tap(data => console.log(JSON.stringify(data)),
                map(objects => objects)


                // Some additional Code
            ))
        .subscribe((response) => {
            // Substitute where you want to store this data. 
            this.user.email = response.user.email;
            this.user.tokens = response.user.tokens;
            this.user.token = response.token;
        });
    // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...