생각의 차이
jwt 토큰의 관해 설명 잘해주신 벨로그
router.post("/user", async (req,res)=> { /// 회원가입 api
const {nickName, password, passwordConfirm } = req.body; ///body는 사용자가 직접 입력하는거 (선더 클라이언트에서 바디값 주는거랑 비슷 실제로는 웹사이트에서) /// prars 는 url
const exitUser = await Object.find({ ///exitUser는 중복되는 닉네임이나 이메일 찾기위한 변수
$or: [{nickName}], /// $or 는 처음 나왔는데 아마 or 느낌으로 쓴거 같다.
});
if(exitUser.length){
res.status(400).send({
errorMessage : "중복된 닉네임 입니다."
});
return;
};
console.log(password)
if( password.length<4 ){
res.status(400).send({
errorMessage : "비밀번호가 너무 짧습니다."
});
return;
};
if(password !== passwordConfirm){
res.status(400).send({
errorMessage : "패스워드가 일치하지 않습니다.",
});
return; /// 여기서 리턴을 하는 이유는 에러 났으니까 이 다음 코드가 실행되지 않게 하기 위해서
}
const createdUsers = await Object.create({ nickName, password, passwordConfirm });
res.json({ users: createdUsers });
});
회원가입 페이지 만들던중 이러한 형태로 만들었다. 내가 짠 코드대로 라면 닉네임 중복, 비밀번호의 길이, 패스워드 일치 모두 잘 되어야 하는데
이상하게 가운데있는 비밀번호가 너무 짧습니다. 만 제대로 작동을 하질 않았다.
내가 비밀번호를 3자리를 치든 4자리를 치든 전부다 비밀번호가 짧다고 나왔다.
그래서 비밀번호를 입력하는 방식에 문제가 있다고 판단하였고, 결국 이것을 해결하지 못해서
joi 를 사용하는 쪽으로 했지만,
기술매니저님에게 물어본 후 무엇이 원인인지 알 수 있었다.
일단 length 는 숫자형이 아닌 문자형만 가능한다는것을 오늘 처음 알게 되었다.
그래서 내가 숫자를 아무리 많이 쳐도 어차피 인식이 안되니 항상 에러메시지가 나왔던것.
그래서 매니저님이 알려주신 해결책이 tostring()
이었다.
이것은
if (password.length<4 ) /// 잘못된 방법
if( password.toString().length<4 ) ///올바른 방법
근데 애초부터 숫자형을 못받아서 이렇게 된건데 왜 갑자기 password를 문자형으로 굳이 받으실려는거지?? 라는 생각이 들어서 물어봤더니,
tostring()
을 사용하는 결과값은 실제론 내가 숫자를 치더라도 그 숫자가 문자형이 되어서 나온다.
즉 내가 입력한 숫자는 1234 를 치더라도 실제로는 "1234" 가 되어서 나오게 되는 것이다.
나는 어떻게든 숫자형의 형태로 받을려고만 생각하고 length 를 못쓴다는걸 잊고있엇지만,
tostring()
을 사용함으로써 문자형의 형태가 되고, 그래서 length 도 쓸수 있으니
완벽하게 해결되는 것이다.
실제로
console.log(typeof password.toString())
로 찍어보니 문자형인 string 으로 나온것도 확인할 수 잇었다.
[최종답안]
router.post("/user", async (req,res)=> { /// 회원가입 api
const {nickName, password, passwordConfirm } = req.body; ///body는 사용자가 직접 입력하는거 (선더 클라이언트에서 바디값 주는거랑 비슷 실제로는 웹사이트에서) /// prars 는 url
const exitUser = await Object.find({ ///exitUser는 중복되는 닉네임이나 이메일 찾기위한 변수
$or: [{nickName}], /// $or 는 처음 나왔는데 아마 or 느낌으로 쓴거 같다.
});
if(exitUser.length){
res.status(400).send({
errorMessage : "중복된 닉네임 입니다."
});
return;
};
if( password.toString().length<4 ){
res.status(400).send({
errorMessage : "비밀번호가 너무 짧습니다."
});
return;
};
if(password !== passwordConfirm){
res.status(400).send({
errorMessage : "패스워드가 일치하지 않습니다.",
});
return; /// 여기서 리턴을 하는 이유는 에러 났으니까 이 다음 코드가 실행되지 않게 하기 위해서
}
const createdUsers = await Object.create({ nickName, password, passwordConfirm });
res.json({ users: createdUsers });
});