데브코스
[7주차 - DAY4] 도서 API 구현
미안하다 강림이 좀 늦었다
2024. 4. 11. 13:15
도서 API 구현
테이블 생성
format이 예약어라서 컬럼명을 form으로 설정했다.
BookController 분리
books.js
const express = require('express');
const router = express.Router();
const {
allBooks,
bookDetail
} = require('../controller/BookController');
router.use(express.json());
router.get('/', allBooks); // (카테고리별) 전체 도서 조회
router.get('/:id', bookDetail); // 개별 도서 조회
module.exports = router;
BookController.js
const conn = require('../mariadb');
const { StatusCodes } = require('http-status-codes');
const allBooks = (req, res) => {
// ...
};
const bookDetail = (req, res) => {
// ...
};
module.exports = {
allBooks,
bookDetail
};
(카테고리별) 전체 도서 조회
쿼리로 카테고리 아이디가 들어올 경우에는 해당 카테고리인 도서들을 조회하고, 요청으로 들어온 카테고리 아이디가 없을 경우 존재하는 모든 도서를 조회한다.
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) {
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 {
const 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);
})
}
};
상세 도서 조회
url로 들어온 아이디에 해당하는 도서를 조회한다.
const bookDetail = (req, res) => {
let id = parseInt(req.params.id);
const sql = `SELECT * FROM books WHERE id = ?`;
conn.query(sql, 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[0]);
} else {
return res.status(StatusCodes.NOT_FOUND).end();
}
})
};
카테고리 API 구현
카테고리 전체를 보여주기 위한 API이다.
테이블 생성
카테고리 전체 목록 조회
category.js
const express = require('express');
const router = express.Router();
const {
allCategory
} = require('../controller/CategoryController');
router.use(express.json());
router.get('/', allCategory); // 카테고리 전체 목록 조회
module.exports = router;
CategoryController.js
const conn = require('../mariadb');
const { StatusCodes } = require('http-status-codes');
const allCategory = (req, res) => {
const sql = `SELECT * FROM category`;
conn.query(sql, (err, results) => {
if (err) {
console.log(err);
return res.status(StatusCodes.BAD_REQUEST).end();
}
return res.status(StatusCodes.OK).json(results);
})
}
module.exports = { allCategory };