У меня проблема с HTTP-запросами на Angular5.У меня есть два компонента (" LoginComponent ", " WellcomeComponent ") и один сервис (" AuthService ").
Я использую сервис аутентификации для обработки HTTP-запросов, а также этот сервис является мостом между двумя компонентами.
Я могу получать и публиковать запросы от службы, но не могу правильно использовать результаты из-за наблюдаемых вещей.Я не опытный разработчик Angular, поэтому не могу найти решение.
Итак, теперь я объясняю шаг за шагом.Я напишу здесь весь свой код, и все шаги будут подписаны .. Step_ текстом в коде, чтобы вы могли выполнять все шаги под этим знаком.
LoginComponent
import { Component } from '@angular/core';
import { Router } from '@angular/router';
import { AuthService } from '../../auth.service';
@Component({
selector: 'app-login',
templateUrl: './login.component.html'
})
export class LoginComponent {
loginUserData = {}
constructor(
private _auth: AuthService,
public router:Router ){
//SOMETHING
}
//CLICK FORM SUBMIT BUTTON
public onSubmit(values:Object):void {
//SET USER DATA WITH FORM VALUES
console.log("LoginStep_1 - Hello")
this._auth.getToken(this.loginUserData)
// CHECK TOKEN
// IF VERIFIED
console.log('LoginStep_2 - Token Verified');
this._auth.setUserData(this.loginUserData['username']);
console.log('LoginStep_3 - SetUserData Finished');
this.router.navigate(['/wellcome'])
console.log("LoginStep_4 - Navigated");
}
}
AuthService
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Router } from '@angular/router';
@Injectable()
export class AuthService {
private _tokenUrl = "http://localhost:8000/api/auth/token/";
private getUserInfoUrl = "http://127.0.0.1:8000/api/userInfo/?username="
private userInfo : any;
constructor(
private http: HttpClient,
private _router: Router
) { }
getToken(user){
console.log("getToken_Step1 - Hello");
this.http.post<any>(this._tokenUrl, user)
.subscribe(
res => {
//getToken_Step2 : SET TOKEN SOMEWHERE
console.log("getToken_Step2 - Token : ", res.token);
},
err => console.log(err)
);
console.log("getToken_Step3 - Bye");
}
setUserData(userName){
console.log("setUserData_Step1 - Hello");
this.http.get<any>(this.getUserInfoUrl+userName)
.subscribe(
res=>{
//setUserData_Step2 : SET USERINFO SOMEWHERE
console.log("setUserData_Step2 - User Info : ", res);
},
err=>{
console.log(err);
}
)
console.log("setUserData_Step3 - Bye");
}
getUserData(){
console.log("getUserData_Step1 - Hello");
return this.userInfo;
}
}
WellcomeComponent
import { Component, OnInit } from '@angular/core';
import { AuthService } from '../../../auth.service';
@Component({
selector: 'app-wellcome',
templateUrl: './wellcome.component.html',
styleUrls: ['./wellcome.component.scss'],
})
export class WellcomeComponent implements OnInit {
constructor(private _auth: AuthService){ }
ngOnInit() {
console.log("Wellcome_Step1 - Hello");
let userInfo = this._auth.getUserData();
console.log("Wellcome_Step2 - Show User Info");
}
}
Если вы посмотрите коды, есть много console.log ("Шаг .. , я объясняю, что я хочу сделать, используя их.
КороткоЯ могу сказать, что хочу видеть их в этом порядке на экране консоли:
- LoginStep_1 - Hello: Этот шаг будет работать, нажав кнопку отправки в форме
- getToken_Step1 - Hello: Перейти к службе авторизации
- getToken_Step2 - токен: Получить токениз API и напишите его localStorage
- getToken_Step3 - пока
- LoginStep_2 - токен проверен: затем вернитесь и проверьтеэтот токен.
- setUserData_Step1 - Hello
- setUserData_Step2 - Информация о пользователе: Получить информацию о пользователе из API и написать ее localStorage
- setUserData_Step3 - Пока
- LoginStep_3 - SetUserData Закончено: Я получил токен, проверил его, получил информацию о пользователе и написал ее.Теперь я могу перейти к навигации.
- Wellcome_Step1 - Hello: Навигация с логина
- getUserData_Step1 - Hello: получить всю информацию, написанную LoginComponent
- Wellcome_Step2 - Показать информацию о пользователе: Делать то, что вы хотите с информацией пользователя
Эти шаги я хочу видеть на экране журнала консоли, но я не вижу их в правильном порядке.Мой вывод на консоль сильно отличается от моего ожидания.Потому что я не знаю, как использовать угловые 5 наблюдаемых, поэтому не могу обработать возвращаемое значение из API.
Моя консоль выводит что-то вроде этого:
- LoginStep_1- Hello
- LoginStep_3 - SetUserData Закончено
- getToken_Step1 - Hello
- getToken_Step2 - токен
... Вот почему этот заказ?Как я могу это исправить?
Итак, как мне это сделать?Я хочу взять токен и информацию о пользователе по LoginComponent и использовать их из компонента WellCome.
Как я уже сказал, я не опытный кодер, поэтому, возможно, решение очень простое, но не может найти.
Спасибо за вашу помощь.