웹 풀스택
[도서 쇼핑몰] Node.js - 도서 조회 관련 API 구현하기
kevinmj12
2025. 3. 13. 20:22
도서 전체 조회 (카테고리, 신간 옵션)
const books = (req, res) => {
let categoryId = req.query.categoryid;
let isNew = req.query.isnew;
let sql = "SELECT * FROM books;"; // 전체 도서 조회
let values = [];
if (categoryId && isNew) {
// 카테고리별 신간 도서 조회
sql = `SELECT * FROM books WHERE category_id = ? AND
pub_date BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW();`;
values = [categoryId, isNew];
} else if (categoryId) {
// 카테고리별 조회
sql = "SELECT * FROM books WHERE category_id = ?";
values = [categoryId];
} else if (isNew) {
// 신간 조회
sql = `SELECT * FROM books WHERE
pub_date BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW();`;
values = [isNew];
}
conn.query(sql, values, (err, results) => {
if (err) {
return res.status(StatusCodes.BAD_REQUEST).json({
msg: `Error: ${err.code}`,
});
}
return res.status(StatusCodes.OK).json(results);
});
};
참고로 신간 조회할 때 사용한 SQL의 WHERE절은
pub_date BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW() 인데,
BETWEEN 'A' AND 'B'는 A와 B 사이를 뜻하며
DATE_SUB('A', INTERVAL 1 MONTH)는 A로부터 1달 전을 뜻한다.
따라서 pub_date BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW()는
pub_date가 오늘로부터 1달 전 ~ 오늘 사이에 해당되는 컬럼들을 뽑아오라는 뜻이다.
개별 도서 조회
const bookDetail = (req, res) => {
let { id } = req.params;
id = parseInt(id);
const sql = `SELECT * FROM books LEFT JOIN categories
ON books.category_id = categories.id WHERE id=?;`;
conn.query(sql, id, (err, results) => {
if (err) {
return res.status(StatusCodes.BAD_REQUEST).json({
msg: `Error: ${err.code}`,
});
}
if (results[0]) {
return res.status(StatusCodes.OK).json(results[0]);
} else {
return res.status(StatusCodes.NOT_FOUND).end();
}
});
};