DB를 이용하여 채널 전체 조회하기
유효성 검사
body("user_id").notEmpty().withMessage("user_id를 입력해주세요")
.isInt().withMessage("user_id 데이터가 잘못입력되었습니다.")
채널 전체 조회
이미 유효성 검사를 통해서 user_id 값이 undefined로 넘어오는것이 아니기 때문에 해당 부분을 if(data.length === 0)으로 조건을 넘겼고, 해당 조건이 일치할경우는 user_id값을 갖고있는 채널이 존재하지 않다는 뜻이기 때문에 notFoundChannel함수를 사용하였습니다.
const { user_id } = req.body;
try {
const select_sql = "select * from channels where user_id = ?";
const [data] = await conn.query(select_sql, [user_id]);
if (data.length === 0) {
notFoundChannel(res);
return;
}
res.status(200).json(data);
} catch (err) {
return res.status(400).end();
}
이전 코드 정리
DB 구성
// 변경 후 channel DB (23.12.17)
db = {
channelNum(key) : {
userId : '유저아이디',
channelTitle : '채널명',
description : '채널설명문'
}
}
//변경전 코드
db = {
idx,
{
user : test1,
channels :[
{channelTitle : '테스트', description : '채널설명', channelId : 번호}
]
}
}
기본 코드 작성
app
.route("/")
.get((req, res) => {
let {userId} = req.body
let hasUser = false;
let channelData = [];
db.forEach((v, i) => {
if (userId === v.userId) {
hasUser = true;
channelData.push(v);
}
});
res.status(200).json(channelData);
})
//변경전 코드
app
.route("/channels/:user")
.get((req, res) => {
const { user } = req.params;
let hasUser = false;
let userKey = "";
let channelData = "";
db.forEach((v, i) => {
if (user === v.user) {
hasUser = true;
userKey = i;
channelData = v.channels;
}
});
res.status(200).json(channelData);
})
마지막으로 유저의 채널 전체 조회인데요. 기본적으로 db에서 user정보가 일치할 경우 정보를 입력을 해주게 작성을 했습니다.
db구조가 변경되면서 userId를 body로 받아오기 때문에 hasUser나 userKey와 같은 변수를 받을 필요가 없어졌습니다 .때문에 channelData를 빈 배열로 선언하고 db의 데이터에서 userId가 일치한 데이터들만 channelData에 push로 데이터를 넣을수 있게 코드를 짰습니다.
Check 사항
1. 유저가 존재하는가? → body안에 userId값이 존재하는가?
2. 채널데이터가 존재하는가?
3. (추가) db가 존재하는가?
1. 유저가 존재하는가?
// 변경후 코드
if (!userId || userId == undefined) {
res.status(404).json({
message: "로그인이 필요한 페이지 입니다."
});
return;
}
// 변경전 코드
if (!hasUser) {
res.status(404).json({
message: "존재하지 않는 유저입니다."
});
return;
}
postman 확인
2. 채널데이터가 존재하는가?
// 변경후 코드
if (channelData.length === 0) {
res.status(404).json({
message: "채널이 존재하지 않습니다."
});
return;
}
// 변경전 코드
if (!channelData) {
res.status(404).json({
message: "채널이 존재하지 않습니다."
});
return;
}
유저가 존재하지만 채널데이터가 없는 경우에는 채널이 존재하지 않는 걸 나타내기 위해 따로 예외처리를 해주었습니다.
channelData의 기본값이 빈배열로 변경됨에 따라 배열 안의 데이터가 0개일때 예외처리 되게 변경되었습니다.
3. (추가) db자체가 존재하지 않는경우
if (!db.size) {
res.status(404).json({
message: "조회할 채널이 없습니다."
});
return;
}
코드 시작 전에 db의 size가 없을경우 즉, 데이터베이스에 데이터가 존재하지 않는 경우에는 조회할 채널이 없다고 먼저 선언을 하여 예외처리를 할 수 있습니다. 이때 db자체에 데이터가 없기 때문에 body에 userId가 존재하던 안하던 무조건 조회할 채널이 없다고 뜨게 설정할 수 있습니다.
postman 확인
postman 확인
문제가 없는경우에는 아래와 같이 데이터가 잘 나오는 걸 확인할 수 있습니다.
추가했으면 하는 기능
1. 구독
2. 영상 갯수
'프로젝트 > 1.youtube-project' 카테고리의 다른 글
[실전]미니 프로젝트 - channel과 user ERD를 생각해보자 (0) | 2023.12.17 |
---|---|
[실전]미니 프로젝트 - 서버에서 router관리하기 (0) | 2023.12.17 |
[실전]미니 프로젝트 - 채널 개별 "수정" (0) | 2023.12.15 |
[실전]미니 프로젝트 - 개별 채널 "삭제" (0) | 2023.12.15 |
[실전]미니 프로젝트 - 채널 개별 "조회" (0) | 2023.12.14 |