8-3 도서/카테고리 API, picsum
이전에 작성한 API 설계를 기반으로 작성된 ERD
! 03.14 수정) MySQL 예약어와 겹치는 단어 수정
// 전체 도서 조회
const allBooks = (req, res) => {
let sql = 'SELECT * FROM books';// 전체 조회
conn.query(sql, (err, results) => {
if (err) {
console.log(err);
return res.status(StatusCodes.BAD_REQUEST).end();
}
return res.status(StatusCodes.OK).json(results);
})
}
// 상세 도서 조회
const bookDetail = (req, res) => {
let { id } = req.params;
let sql = "SELECT * FROM books WHERE id=?";// 특정 id만
conn.query(sql, id,
(err, results) => {
if (err) {
console.log(err);
return res.status(StatusCodes.BAD_REQUEST).end();
}
if (results[0])
return res.status(StatusCodes.OK).json(results[0]);
else
return res.status(StatusCodes.NOT_FOUND).end();
})
}
<books.js>
// 전체 도서 조회
router.get('/', allBooks);
// 개별 도서 조회
router.get('/:id', bookDetail);
// 카테고리별 도서 목록 조회
router.get('/', booksByCategory);
'전체 도서 조회'와 '카테고리별 도서 목록 조회'의 HTTP method, URI가 동일한 상황에서는 상단에 위치한 라우터가 실행됩니다.
-> postman에서 카테고리 조회 시도시 계속 전체 도서가 불러와지는 이유
|해결|
두 API를 하나로 합칩니다.
const allBooks = (req, res) => {
let { category_id } = req.query;
if (category_id) { // <=== category_id가 있으면
let sql = "SELECT * FROM books WHERE category_id=?";
conn.query(sql, category_id,
(err, results) => {
if (err) {
console.log(err);
return 
res.status(StatusCodes.BAD_REQUEST).end();
}
if (results.length)
return res.status(StatusCodes.OK).json(results);
else
return res.status(StatusCodes.NOT_FOUND).end();
})
} else { // <=== category_id가 없으면 (도서 전체 조회)
let sql = "SELECT * FROM books";
conn.query(sql, (err, results) => {
if (err) {
console.log(err);
return res.status(StatusCodes.BAD_REQUEST).end();
}
return res.status(StatusCodes.OK).json(results);
})
}
}
해당하는 카테고리의 목록이 출력이 되지만 숫자로 표시됩니다.
1) 카테고리(category)테이블을 생성하고
2) books 테이블에 존재하는 category_id 와 category 테이블을 JOIN 시켜 name으로 조회될 수 있게 합니다.
(8-4 에서 추가작성)
간단하고 다양한 이미지들을 이미지의 id값으로 사용할 수 있는 기능을 제공합니다.