
저번에 완성하지 못하고 넘겼던 로그인 기능과
추가적으로 예외처리, 고도화를 실습하였다.
// 로그인
app.post('/login', (req, res) => {
let {userId , password} = req.body;
db.forEach((user,id)=>{
if(user.userId === userId){
console.log("같은 아이디");
// pwd도 같은지 확인
if(user.password === password){
console.log("같은 패스워드");
}else{
console.log("다른 패스워드");
}
}
})
})
db.forEach() 를 사용하여 아이디가 존재하는지 우선 확인을 해야한다.
우선 body에서 넘어온 userId 가 db에 존재하면 console.log("같은 아이디") 로 출력하고
password 도 비교해야하기 때문에
같은 로직으로 password 또한 db에서 비교한다.
지금 코드는 forEach() 안에서 console.log 를 실행하기 때문에 db에 10개의 데이터가 있다면
출력도 10번 반복하기 때문에 비효율적이라고 생각한다.
// 로그인
app.post('/login', (req, res) => {
let {userId , password} = req.body;
let loginUser = {};
db.forEach((user,id)=>{
if(user.userId === userId){
loginUser = user;
}
})
if(!isEmpty(loginUser)){
console.log("같은 아이디");
// pwd도 같은지 확인
if(loginUser.password === password){
console.log("같은 패스워드");
}else{
console.log("다른 패스워드");
}
}else{
console.log("입력하신 아이디는 없는 아이디 입니다.");
}
})
그래서 고려해 위 같은 코드를 만들었다.
우선 loginUser 라는 변수를 새로 만들어
forEach() 안에서 같은 user가 있다면 새 변수에 저장을 하고
forEach() 밖에서 if/else 문으로 예외 처리를 하는 것이다.
이때 isEmpty() 라는 함수를 사용했는데 아래에서 더 설명하겠다.
function isEmpty(obj){
if(Object.keys(obj).length === 0){
return true;
}else{
return false;
}
}
빈 객체 확인하는 방법 3가지
{}
1. 객체.keys()
2. for
3. lodash (외부 패키지)
위 코드는 실습 진행을 위한 isEmpty() 함수이며
이때 빈 객체를 확인 하는 방법 3가지도 같이 알아보았다.
Object.keys()
위 코드를 사용하면 객체가 배열처럼 반환이 된다.
따라서 .length 로 그 길이가 0인지 아닌지 비교를 해 빈 객체인지 확인하는 것이다.
// 로그인
app.post('/login', (req, res) => {
console.log(req.body) // id, pwd
// id가 db에 저장된 회원인지 확인하기
const {userId , password} = req.body;
let hasUserId = false;
let loginUser = {};
db.forEach((user , id) => {
if(user.userId === userId){
loginUser = user;
}
})
if(!isEmpty(loginUser)){
if ( loginUser.pwd === password ){
res.status(201).json({
message : `${loginUser.name}님 로그인 성공하셨습니다.`
})
}else{
console.log("패스터워는 다르다");
}
}else{
res.status(404).json({
message : `입력하신 아이디는 없는 아이디 입니다.`
})
}
})
로그인 코드를 더 고도화 한 코드가 위 코드이다.
크게 바뀐 부분은 없고
response 부분에 .status 를 붙힌 것이다.
res.status(...)... 로 어떤 상태인지 더 상세하게 작성할 수 있다.

이렇게 정상적으로 회원가입 진행되고

로그인도 성공적으로 완성했다!
오늘은 로그인을 마무리 하면서 사용자 서비스에 관한 내용을 학습했다.
이런 방식으로 실제 사이트들도 운영되겠구나 생각을 하였고 아직 login 부분이 익숙하지 않아 남는 시간에 더 코드를 회고해보면서 숙달시키는게 중요하겠다고 생각을 했다.