No campo Full Name, se eu digito alguma coisa, no caso, digitei 'flavio', aparece no console os seguintes erros:
zone-evergreen.js:2952 GET http://localhost:3000/user.exists/flavio 404 (Not Found) ERROR HttpErrorResponse {headers: HttpHeaders, status: 404, statusText: "Not Found", url: "http://localhost:3000/user.exists/flavio", ok: false, …}
Sabendo que flavio é uma rota válida, pois acessamos http://localhost:4200/user/flavio.
O único arquivo que mencionei user.exists foi o signup.service.ts:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
const API_URL = "http://localhost:3000";
@Injectable({ providedIn: 'root' })
export class SignUpService {
constructor(private http: HttpClient) {}
checkUserNameTaken(userName: string) {
return this.http.get(API_URL + '/user.exists/' + userName);
}
}
É normal isso?
Também estou com problema na validação do user name, que ele deveria executar depois de 300ms, que é o que foi passado pelo debounceTime(300). Porém ele não respeita isso, nem termino de digitar já valida. Além de que o nome de usuario flavio ja existe, então deveria de dar erro, mas ele retorna User available para tudo.
import { Injectable } from '@angular/core';
import { SignUpService } from './signup.service';
import { AbstractControl } from '@angular/forms';
import { debounceTime, switchMap, map, first } from 'rxjs/operators';
@Injectable({ providedIn: 'root' })
export class UserNotTakenValidatorService {
constructor(private signUpService: SignUpService) {}
checkUserNameTaken() {
return (control: AbstractControl) => {
return control
.valueChanges
.pipe(debounceTime(300))
.pipe(switchMap(userName =>
this.signUpService.checkUserNameTaken(userName)
))
.pipe(map(isTaken => isTaken ? { userNameTaken: true } : null)) //faz um map do resultado que é isTaken, e aí ve se ele é true (ja existe), dai retorna userNameTaken true, se não retorna null
.pipe(first()); //pega o primeiro valor e completa
}
}
}