도서 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 };
'데브코스' 카테고리의 다른 글
[7주차 - DAY5] 도서 API 구현(2) (0) | 2024.04.12 |
---|---|
[7주차 복습 발표] 암호화 (0) | 2024.04.11 |
[7주차 - DAY3] 사용자 API 구현 & 비밀번호 암호화 (0) | 2024.04.10 |
[7주차 - DAY2] 도서 정보 API 설계 및 구현 (0) | 2024.04.09 |
[7주차 - DAY1] 도서 정보 API 설계 및 ERD 설계 (0) | 2024.04.08 |