Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

사고쳤어요

[Node.js] 유튜브 서비스 - 회원가입 서비스(DB 연결) 본문

웹 풀스택

[Node.js] 유튜브 서비스 - 회원가입 서비스(DB 연결)

kevinmj12 2025. 2. 26. 21:09

https://makeaccident.tistory.com/119

 

[Node.js] 유튜브 서비스 - 회원가입 기능(POST)

let userDb = new Map();var id = 1;app.post("/join", (req, res) => { let body = req.body; let userId = body.id; let password = body.password; let userName = body.name; let isIdDuplicated = false; for (let value of userDb.values()) { if (value.id === userId)

makeaccident.tistory.com

회원가입 서비스를 데이터베이스에 연결하여 구현해보자.

// 2. 회원가입
router.post("/join", (req, res) => {
  let body = req.body;
  let email = body.id;
  let password = body.password;
  let name = body.name;
  let phone = body.phone;

  // 정보가 누락된 경우 예외 처리
  if (!email) {
    res.status(400).json({
      message: "id가 포함되어있지 않습니다.",
    });
  } else if (!password) {
    res.status(400).json({
      message: "password가 포함되어있지 않습니다.",
    });
  } else if (!name) {
    res.status(400).json({
      message: "name이 포함되어있지 않습니다.",
    });
  } else if (!phone) {
    res.status(400).json({
      message: "phone이 포함되어있지 않습니다.",
    });
  } else {
    conn.query(
      `INSERT INTO users (email, name, password, phone) 
      VALUES (?, ?, ?, ?)`,
      [email, name, password, phone],
      (err, rows, fields) => {
        if (err instanceof Error) {
          console.log(err);
          return;
        }
        res.status(201).json({
          message: `${name}님 환영합니다`,
        });
      }
    );
  }
});

 

먼저 아이디 중복을 체크하는 과정인 isIdDuplicated 관련 코드가 수정되었다.

먼저 SELECT 쿼리문을 통해 아이디가 존재하는지를 확인하고, 존재한다면 isIdDuplicated를 true로 설정해준다.

 

그리고 마지막에 INSERT INTO문을 통해 email, name, password, phone을 추가한다.

여기서 (?, ?, ?, ?)와 같이 입력을 해두고, 뒤에 배열 [email, name, password, phone]을 입력하여 쿼리문을 작성할 수 있다.

 

실제로 테스트를 해보면 5번 id에 Tom이 추가된 것을 확인할 수 있다.

그런데 만약 중복되는 email로 회원가입을 진행하면 어떻게 될까?

 

위와 같이 postman에서는 무한 로딩에 빠져버리고, 콘솔에서는 에러가 출력되는 것을 볼 수 있다.

else {
    conn.query(
      `INSERT INTO users (email, name, password, phone) 
      VALUES (?, ?, ?, ?)`,
      [email, name, password, phone],
      (err, rows, fields) => {
        if (err.errno == 1062) {
          res.status(400).json({
            message: "이미 가입되어있는 id입니다.",
          });
        } else if (err) {
          console.log(err);
          return;
        } else {
          res.status(201).json({
            message: `${name}님 환영합니다`,
          });
        }
      }
    );
  }

이를 해결하기 위해 errno가 1062인 경우 401을 보내준다면 예외 처리가 잘 될 것이다.