DB를 이용하여 채널 개별 조회하기
유효성 검사(express-validator)
이번 유효성 검사는 params로 받아오기때문에 param을 통해서 비어있지 않은 경우를 확인하기로 했습니다.
[param("id").notEmpty().withMessage("id 값이 없습니다.")]
채널 개별 조회
조회는 SELECT문을 사용하는데요 id값이 존재 하지 않는 경우에는 undefined를 받기 때문에 if문에 걸려서 notFoundChannel이 호출이 되고 return시켜 아래 코드를 읽지 않게 됩니다.
let { id } = req.params;
id = parseInt(id);
const select_sql = "select * from channels where id = ?";
try {
const [[user]] = await conn.query(select_sql, id);
if (!user) {
return notFoundChannel(res);
}
res.status(200).json(user);
} catch (err) {
return res.status(400).end();
}
이전 코드 정리
DB 구성
db = {
idx,
{
user : test1,
channels :[
{channelTitle : '테스트', description : '채널설명'}
]
}
}
기본 코드 작성
app.get("/channels/:user/:num", (req, res) => {
const { user, num } = req.params;
let userData = "";
let userKey = "";
let hasUser = false;
db.forEach((value, key) => {
if (value.user === user) {
userData = value;
userKey = key;
hasUser = true;
}
});
res.status(200).json({
message: '채널개별조회'
});
})
개별조회를 할 때 예외가 될 상황을 생각을 해봤습니다. URI를 통해서 정보를 받아오는데 이때 user가 없는 사람이거나, 아니면 채널번호가 존재하지 않는 URI를 전송받았을 때 예외처리를 하면 좋을 것 같아서 차근차근 코드를 작성해 보기로 했습니다.
1. user가 존재하는가?
2. 채널번호가 존재하는가?
1. user가 존재하는가?
if (!hasUser) {
res.status(400).json({
message: "존재하지 않는 유저입니다."
});
return;
}
hasUser를 통해서 db에 user가 넘겨받은 user와 같은 경우에 true값을 반환하여 user의 존재여부를 파악하였고, false일 경우에 400 상태코드를 전달하고, 존재하지 않는 유저라는 메시지도 같이 보내주었습니다.
이때 hasUser로만 조건을 건 이유는 유저가 존재하지 않고 채널도 존재하지 않을 수 있는 상황을 구체적으로 어디가 문제가 되는지 구분을 하기 위해 hasUser와 userData로 분리하였습니다.
2. 채널번호가 존재하는가?
if (!userData.channels[num]) {
res.status(400).json({
message: "존재하지 않는 채널입니다."
});
return;
}
userData의 channels에 접근하여 num번째 객체가 존재하는지를 확인하여 존재하지 않을 때 상태코드 400과, 존재하지 않는 채널이라고 메시지를 전달해 주게 작업을 했습니다.
3. 유저와 채널번호가 둘 다 존재하는가?
const data = db.get(userKey).channels[num];
res.status(200).json(data);
두 정보가 문제없다면 db에서 정보를 받아 json으로 보내주었습니다.
'프로젝트 > 1.youtube-project' 카테고리의 다른 글
[실전]미니 프로젝트 - 채널 개별 "수정" (0) | 2023.12.15 |
---|---|
[실전]미니 프로젝트 - 개별 채널 "삭제" (0) | 2023.12.15 |
[실전]미니 프로젝트 - 채널 "생성" (0) | 2023.12.14 |
[실전]미니 프로젝트 - 로그인 (0) | 2023.12.14 |
[실전]미니 프로젝트 - 회원 개별 "탈퇴" (0) | 2023.12.14 |