2023.12.29(금)
(이미지는 아직 고려 X)
npm i express dotenv express-validator jsonwebtoken mysql2
.env
PORT = 7777 # express port number
app.js
const express = require('express');
const app = express();
const dotenv = require('dotenv');
dotenv.config();
app.listen(process.env.PORT, () => console.log(`> Server is running on http://localhost:${process.env.PORT}/`))
const userRouter = require('./routes/users');
const bookRouter = require('./routes/books');
const likeRouter = require('./routes/likes');
const cartRouter = require('./routes/carts');
const orderRouter = require('./routes/orders');
app.use(express.json());
app.use('/users', userRouter);
app.use('/books', bookRouter);
app.use('/likes', likeRouter);
app.use('/cart', cartRouter);
app.use('/orders', orderRouter);
routes/users.js
const express = require('express');
const router = express.Router();
// const jwt = require('jsonwebtoken');
const signUp = (req, res) => {
res.json("회원가입");
};
const signIn = (req, res) => {
res.json("로그인");
};
const passwordResetRequest = (req, res) => {
res.json("비밀번호 재설정 요청");
};
const resetPassword = (req, res) => {
res.json("비밀번호 재설정");
};
router.post('/join', signUp);
router.post('/login', signIn);
router.route('/reset-password')
.post(passwordResetRequest)
.put(resetPassword);
module.exports = router;
routes/books.js
const express = require('express');
const router = express.Router();
const booksRequestHandler = (req, res) => {
// 추후 express-validator 사용 (지금은 간단히 분기 로직 구현)
const { categoryId, new:isNew } = req.query;
if (categoryId || isNew) {
getBooksByCategory(req, res);
} else {
getAllBooks(req, res);
}
}
const getAllBooks = (req, res) => {
res.json("전체 도서 조회");
};
const getBookById = (req, res) => {
res.json("개별 도서 조회");
};
const getBooksByCategory = (req, res) => {
res.json("카테고리별 도서 목록 조회");
};
router.get('/', booksRequestHandler);
router.get('/:bookId', getBookById);
module.exports = router;
routes/likes.js
const express = require('express');
const router = express.Router();
const likeBook = (req, res) => {
res.json("좋아요 추가");
};
const unlikeBook = (req, res) => {
res.json("좋아요 취소");
};
router.route('/:bookId')
.post(likeBook)
.delete(unlikeBook);
module.exports = router;
routes/carts.js
const express = require('express');
const router = express.Router();
const addToCart = (req, res) => {
res.json("장바구니 담기");
};
const getCart = (req, res) => {
res.json("장바구니 조회");
};
const removeFromCart = (req, res) => {
res.json("장바구니 삭제");
};
const getSelectedItemsFromCart = (req, res) => {
res.json("장바구니에서 선택한 '주문 예상' 상품 목록 조회");
};
router.route('/')
.post(addToCart)
.get(getCart);
router.delete('/:bookId', removeFromCart); // bookId가 아니라 cart의 itemId가 될 수도
router.post('/items', getSelectedItemsFromCart); // uri 미확정. 일단 임시로.
module.exports = router;
routes/orders.js
const express = require('express');
const router = express.Router();
const submitOrder = (req, res) => {
res.json("결제(주문)하기");
};
const getOrderList = (req, res) => {
res.json("주문 목록(내역) 조회");
};
const getOrderDetails = (req, res) => {
res.json("주문 상세 상품 조회");
};
router.route('/')
.post(submitOrder)
.get(getOrderList);
router.get('/:orderId', getOrderDetails);
module.exports = router;
모두 handler를 함수로 빼서 어떤 API인지 쉽게 알 수 있도록 해보았다.
ERD와 API는 모두 추후 코드를 작성하며 수정될 수 있다.