프로그래머스 데브코스, 국비지원교육, 코딩부트캠프
도서 조회를 할 수 있는 BookController.js 부분을 완성시켰다. 그리고 조원 분의 조언에 따라 유효성 검사 하는 부분을 미들웨어로 분리시켰다!
const allBooks = (req, res) => {
const { category_id } = req.query;
if (category_id) {
const sql = 'select * from books where category_id = ?';
conn.query(sql, category_id, (err, results) => {
if (err) {
return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({
error: err.message,
});
}
if (results.length === 0) {
return res.status(StatusCodes.NOT_FOUND).json({
message: '해당하는 카테고리의 도서가 없습니다.',
});
}
return res.status(StatusCodes.OK).json(results);
});
} else {
const sql = 'select * from books';
conn.query(sql, (err, results) => {
if (err) {
return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({
error: err.message,
});
}
if (results.length === 0) {
return res.status(StatusCodes.NOT_FOUND).json({
message: '도서가 없습니다.',
});
}
return res.status(StatusCodes.OK).json(results);
});
}
};
/books
GET
: 데이터베이스 내에 존재하는 모든 도서를 응답으로 반환해준다. 보낸 응답에서 필요한 정보를 프론트에서 선별해서 사용하게끔 상세 정보까지 전부 반환한다.
/books?category_id=()
GET
: 쿼리로 카테고리 아이디를 받아 해당하는 카테고리의 도서를 모두 반환해준다. 여기서 path parameter로 받는 게 아니라 쿼리로 받은 이유는 보통 필터링을 할 때는 쿼리로 받아 온다고 한다.
보면 위의 코드가 상당히 지저분해보인다. 이 글을 쓰고 있는 현재는 리팩토링을 한 상태이다.
데이터베이스 내의 모든 도서 목록을 반환한다.
쿼리로 카테고리 아이디를 받아오면 해당 카테고리에 맞는 도서를 필터링해서 반환한다.
해당하는 카테고리 아이디가 없다면 404 Not Found를 반환한다.
const bookDetail = (req, res) => {
const { id } = req.params;
const sql = 'select * from books where id = ?';
conn.query(sql, id, (err, results) => {
if (err) {
return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({
error: err.message,
});
}
if (results.length === 0) {
return res.status(StatusCodes.NOT_FOUND).json({
message: '해당하는 도서가 없습니다.',
});
}
return res.status(StatusCodes.OK).json(results[0]);
});
};
/books/:id
GET
: 파라미터로 아이디를 받아 해당하는 아이디의 도서를 반환한다. 아이디가 존재하지 않으면 404 Not Found를 반환한다.
파라미터로 도서 아이디 3을 받아오자 해당하는 아이디의 도서의 모든 정보가 반환되는 것을 볼 수 있다.
데이터베이스 내에 해당 아이디의 도서가 존재하지 않는다면 404 Not Found 에러를 반환한다.