1️⃣ 테이블을 설계한대로 만들어보자



2️⃣ (쿠키영상) 잠깐! 컬럼 이름 변경 필요합니다!

1️⃣ books와 컨트롤러를 분리
const express = require("express");
const router = express.Router();
const conn = require('../mariadb'); // db 모듈
const {
allBooks,
bookDetail,
booksByCategory
} = require('../controller/BookController'); // 컨트롤러 불러옴
router.use(express.json()); // POST를 사용하면 값을 json형태로 받아오기 때문에 추가
// 도서 전체 조회
router.get('/', allBooks);
// 도서 개별 조회
router.get('/:id', bookDetail);
// 카테고리별 도서 목록 조회
router.get('/', booksByCategory);
module.exports = router;
const {StatusCodes} = require('http-status-codes'); // 상태 모듈
const conn = require('../mariadb'); // db 모듈
// 도서 전체 조회
const allBooks = (req,res) => {
res.json('도서 전체 조회');
}
// 도서 개별 조회
const bookDetail = (req,res) => {
res.json('도서 개별 조회');
};
// 카테고리별 도서 목록 조회
const booksByCategory = (req,res) => {
res.json('카테고리별 도서 목록 조회');
};
module.exports = {
allBooks,
bookDetail,
booksByCategory
};
1️⃣ 도서 전체조회
// 도서 전체 조회
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 // BAD REQUEST
}
return res.status(StatusCodes.OK).json(results)
})
}

2️⃣ 개별 도서 조회
const bookDetail = (req, res) => {
// URL 경로에서 id를 추출 (req.params는 URL의 경로 매개변수를 나타냄)
let { id } = req.params; // URL에 포함된 id를 비구조화 할당으로 추출
// 특정 id의 책 정보를 조회하는 SQL 쿼리문
let sql = "SELECT * FROM books WHERE id=?";
// 데이터베이스 쿼리 실행
conn.query(sql, id, (err, results) => {
// 쿼리 실행 중 에러가 발생한 경우
if (err) {
console.log(err); // 에러를 콘솔에 출력
return res.status(StatusCodes.BAD_REQUEST).end(); // 400 Bad Request로 응답
}
// 조회된 책 정보가 존재하는 경우
if (results[0]) {
return res.status(StatusCodes.OK).json(results[0]); // 첫 번째 결과를 JSON 형식으로 응답
} else {
// 책 정보가 없는 경우 (id에 해당하는 책이 존재하지 않을 때)
return res.status(StatusCodes.NOT_FOUND).end(); // 404 Not Found로 응답
}
});
};
1️⃣ piksum를 이용해보자

2️⃣ 이미지 경로를 추가해보자
먼저, 데이터 베이스에 이미지 주소를 넣어보자

테이블에는 이미지 번호만 넣어주면 된다.

1️⃣ 카테고리 목록 조회를 위해 QueryString를 사용해보자



2️⃣ 카테고리별 도서 조회
const booksByCategory = (req, res) => {
// 클라이언트가 보낸 쿼리 파라미터에서 category_id를 추출
let { category_id } = req.query;
// 특정 category_id에 속한 도서를 조회하는 SQL 쿼리문
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(); // 400 상태 코드 응답
}
// 조회된 도서 목록이 존재하는 경우
if (results.length) {
return res.status(StatusCodes.OK).json(results); // 전체 도서 목록을 배열로 응답
} else {
// 도서 목록이 없는 경우 (해당 카테고리에 도서가 없을 때)
return res.status(StatusCodes.NOT_FOUND).end(); // 404 상태 코드 응답
}
});
};

1️⃣ 전체도서 조회와 카테고리의 URL이 같아서 에러발생
// 도서 전체 & 카테고리 조회
const allBooks = (req,res) => {
let {category_id} = req.query;
if(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(); // BAD REQUEST
}
if(results.length)
return res.status(StatusCodes.OK).json(results[0]); // results[0]을 보내면 배열형태가 아니게 됨
else
return res.status(StatusCodes.NOT_FOUND).end();
})
} else { // 도서 전체조회
let sql = "SELECT * FROM books";
conn.query(sql, (err, results) => {
if(err) {
console.log(err);
return res.status(StatusCodes.BAD_REQUEST).end(); // BAD REQUEST
}
return res.status(StatusCodes.OK).json(results);
})
}
};
2️⃣ 카테고리 테이블 생성

3️⃣ 카테고리 API 설계
✅ 카테고리 전체 조회 API
[
{
id : 0,
name : "동화"
},
{
id : 1,
name : "소설"
},
...
]
1️⃣ 카테고리 루트 만들기
const express = require("express");
const router = express.Router();
const conn = require('../mariadb'); // db 모듈
const {allCategory} = require('../controller/CategoryController')
router.use(express.json()); // POST를 사용하면 값을 json형태로 받아오기 때문에 추가
// 카테고리 전체 목록 조회
router.get('/', allCategory);
module.exports = router;
const {StatusCodes} = require('http-status-codes'); // 상태 모듈
const conn = require('../mariadb'); // db 모듈
// 카테고리 전체 목록 조회
const allCategory = (req,res) => {
let sql = "SELECT * FROM category";
conn.query(sql, (err, results) => {
if(err) {
console.log(err);
return res.status(StatusCodes.BAD_REQUEST).end(); // BAD REQUEST
}
return res.status(StatusCodes.OK).json(results);
})
};
module.exports = {allCategory}
