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. 27. 13:30

https://makeaccident.tistory.com/124

 

[Node.js] 유튜브 서비스 - 채널 삭제, 채널 수정(DELETE, PUT)

채널 수정.put((req, res) => { let { id } = req.params; id = parseInt(id); let newChannelTitle = req.body.channelTitle; let channel = channelDb.get(id); let oldChannelTitle = channel.channelTitle; if (channel) { channel.channelTitle = newChannelTitle; c

makeaccident.tistory.com

채널 수정 서비스를 데이터베이스에 연결하여 구현해보자.

 

.put(
    [param("id").notEmpty(), body("name").notEmpty().isString()],
    (req, res) => {
      validationError(req, res);

      let { id } = req.params;
      id = parseInt(id);
      let { name } = req.body;

      let sql = `UPDATE channels SET name=? WHERE id=?`;
      let values = [id, name];
      conn.query(sql, values, (err, rows, fields) => {
        if (err) {
          return res.status(400).json({
            message: `err: ${err}`,
          });
        }

        if (rows.length) {
          res.json({
            message: "채널 이름 수정이 완료되었습니다.",
          });
        } else {
          res.status(404).json({
            message: "채널 정보를 찾을 수 없습니다.",
          });
        }
      });
    }
  )

UPDATE channels SET name=? WHERE id=? 를 통해 채널 이름 수정을 진행하였다.

하지만 실제로 요청을 해보면 문제가 발생한다.

 

MySQL을 보면 1번 id의 채널명이 잘 변경되었지만 Postman에서는 채널 정보를 찾을 수 없다는 메시지가 리턴된다.

UPDATE문을 실행한 경우 성공한 경우와 실패한 경우 모두 rows에 어떠한 값도 포함되지 않기 때문이다.

조금 더 자세히 살펴보기 위해 rows를 출력해보자.

rows를 출력해보면 affectedRows에 영향을 받은 row의 수가 찍혀있는 것을 알 수 있다.

만약 없는 채널 아이디에 대한 채널 이름 수정을 진행하는 경우에 이 값이 어떻게 되는지 보자.

affectedRows가 0으로 나왔다.

rows.length()가 아니라, affectedRows를 활용한다면 현재 발생한 오류를 해결할 수 있을 것이다.

if (rows.affectedRows) {
  res.json({
    message: "채널 이름 수정이 완료되었습니다.",
  });
} else {
  res.status(404).json({
    message: "채널 정보를 찾을 수 없습니다.",
  });
}