class RegisterService {
static #instance = null;
static getInstance() {
if(this.#instance == null) {
this.#instance = new RegisterService();
}
return this.#instance;
}
setErrorMessage(errors) {
const registerError = document.querySelectorAll(".register-error");
}
RegisterServiec class에
setErrorMessage method를 만들고 파라매터 값으로 errors를 넣어준다 (Json으로 error 가 응답받을 때 error메시지가 매게변수임)
class RegisterApi {
static #instance = null;
static getInstance() {
if(this.#instance == null) {
this.#instance = new RegisterApi();
}
return this.#instance;
}
register(user) {
$.ajax({
async: false,
type: "post",
url: "/api/account/register",
contentType: "application/json",
data: JSON.stringify(user),
dataType: "json",
success: response => {
},
error: error => {
console.log(error);
RegisterService.getInstance().setErrorMessage(error.responseJSON.data);
}
});
}
}
AJAX요청할때 RegisterServiec.getInstance().setErrorMessage(error.responseJson.data);로 보낸다
error.responseJSON에 있는 error메시지
UserDto에서 repassword @NotBlank해주기
User 객체에 repassword 와 생성자에 repassword추가
class RegisterEvent {
static #instance = null;
static getInstance() {
if(this.#instance == null) {
this.#instance = new RegisterEvent();
}
return this.#instance;
}
addRegisterSubmitOnclickEvent() {
const registerSubmit = document.querySelector(".register-submit");
registerSubmit.onclick = () => {
const usernameValue = document.querySelectorAll(".register-inputs")[0].value;
const passwordValue = document.querySelectorAll(".register-inputs")[1].value;
const repasswordValue = document.querySelectorAll(".register-inputs")[2].value;
const nameValue = document.querySelectorAll(".register-inputs")[3].value;
const emailValue = document.querySelectorAll(".register-inputs")[4].value;
const user = new User(usernameValue, passwordValue, repasswordValue, nameValue, emailValue);
RegisterApi.getInstance().register(user);
}
}
}
registersubmit.onclick() {}에 repasswordValue 추가
class RegisterService {
static #instance = null;
static getInstance() {
if(this.#instance == null) {
this.#instance = new RegisterService();
}
return this.#instance;
}
setErrorMessage(errors) {
const registerError = document.querySelectorAll(".register-error");
this.#clearErrorMessage();
Object.keys(errors).forEach(error => {
if(error == "username") {
registerError[0].textContent = errors[error];
}else if(error == "password") {
registerError[1].textContent = errors[error];
}else if(error == "repassword") {
registerError[2].textContent = errors[error];
}else if(error == "name") {
registerError[3].textContent = errors[error];
}else if(error == "email") {
registerError[4].textContent = errors[error];
}
});
}
#clearErrorMessage() {
const registerError = document.querySelectorAll(".register-error");
registerError.forEach(error => {
error.textContent = "";
});
}
}
Object.keys(errors)로 AJAX로 받은 에러의 key값과 value값이 저장되어있는 map객체를 for문을 올려서
error객체의 key값에 대한 각각의 조건문을 걸고
registerError[i].textContent = errors[error];로 각각의 에러명을 해당하는 input밑에 textContent로 메세지를 넣어준다
class RegisterService {
static #instance = null;
static getInstance() {
if(this.#instance == null) {
this.#instance = new RegisterService();
}
return this.#instance;
}
setErrorMessage(errors) {
const registerError = document.querySelectorAll(".register-error");
this.#clearErrorMessage();
Object.keys(errors).forEach(error => {
if(error == "username") {
registerError[0].textContent = errors[error];
}else if(error == "password") {
registerError[1].textContent = errors[error];
}else if(error == "repassword") {
registerError[2].textContent = errors[error];
}else if(error == "name") {
registerError[3].textContent = errors[error];
}else if(error == "email") {
registerError[4].textContent = errors[error];
}
});
}
#clearErrorMessage() {
const registerError = document.querySelectorAll(".register-error");
registerError.forEach(error => {
error.textContent = "";
});
}
}
#clearErrorMessage() {
const registerError = document.querySelectorAll(".register-error");
registerError.forEach(error => {
error.textContent = "";
});
}
}
4개의 항목중에 하나라도 입력이 제대로 되어있다면 그부분은 에러메세지를 보여주면 안되기 때문에 error메시지 전체를 초기화 하는 과정을 추가로 넣고
setErrorMessage(errors) {
const registerError = document.querySelectorAll(".register-error");
this.#clearErrorMessage();
Object.keys(errors).forEach(error => {
if(error == "username") {
registerError[0].textContent = errors[error];
}else if(error == "password") {
registerError[1].textContent = errors[error];
}else if(error == "repassword") {
registerError[2].textContent = errors[error];
}else if(error == "name") {
registerError[3].textContent = errors[error];
}else if(error == "email") {
registerError[4].textContent = errors[error];
}
});
}
error메시지를 textContent로 보여주기 전에 #clearErrorMessage();메시지를 호출해서 에러메시지를 모두 초기화 하고 에러가 있는 부분들만 보여줌
this는 두 메소드 모두가 RegisterServiec객체에 있기 때문에 해줌
#은 private
결과
'Project > Project(프로젝트) Library' 카테고리의 다른 글
deletebook (0) | 2023.05.11 |
---|---|
아이디 중복 및 비밀번호 체크 (0) | 2023.05.11 |
회원가입 register js (0) | 2023.05.03 |
회원가입 @valid AOP (0) | 2023.05.02 |
회원가입 DB세팅 (0) | 2023.05.01 |