웹 풀사이클 데브코스 TIL 8주차 DAY 4

갱갱·2024년 1월 5일
0

데브코스 TIL

목록 보기
18/24
post-thumbnail

프로그래머스 데브코스, 국비지원교육, 코딩부트캠프

🚩 프로그래머스 데브코스 웹 풀사이클 과정 8주차 DAY 4


도서 조회를 할 수 있는 BookController.js 부분을 완성시켰다. 그리고 조원 분의 조언에 따라 유효성 검사 하는 부분을 미들웨어로 분리시켰다!

💡 Express로 도서 전체 조회, 카테고리별 도서 조회 구현하기


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) {
                return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({
                    error: err.message,
                });
            }

            if (results.length === 0) {
                return res.status(StatusCodes.NOT_FOUND).json({
                    message: '해당하는 카테고리의 도서가 없습니다.',
                });
            }

            return res.status(StatusCodes.OK).json(results);
        });
    } else {
        const sql = 'select * from books';

        conn.query(sql, (err, results) => {
            if (err) {
                return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({
                    error: err.message,
                });
            }

            if (results.length === 0) {
                return res.status(StatusCodes.NOT_FOUND).json({
                    message: '도서가 없습니다.',
                });
            }

            return res.status(StatusCodes.OK).json(results);
        });
    }
};

/books GET
: 데이터베이스 내에 존재하는 모든 도서를 응답으로 반환해준다. 보낸 응답에서 필요한 정보를 프론트에서 선별해서 사용하게끔 상세 정보까지 전부 반환한다.

/books?category_id=() GET
: 쿼리로 카테고리 아이디를 받아 해당하는 카테고리의 도서를 모두 반환해준다. 여기서 path parameter로 받는 게 아니라 쿼리로 받은 이유는 보통 필터링을 할 때는 쿼리로 받아 온다고 한다.

보면 위의 코드가 상당히 지저분해보인다. 이 글을 쓰고 있는 현재는 리팩토링을 한 상태이다.

데이터베이스 내의 모든 도서 목록을 반환한다.

쿼리로 카테고리 아이디를 받아오면 해당 카테고리에 맞는 도서를 필터링해서 반환한다.

해당하는 카테고리 아이디가 없다면 404 Not Found를 반환한다.

💡 Express로 도서 상세 조회 구현하기


const bookDetail = (req, res) => {
    const { id } = req.params;
    const sql = 'select * from books where id = ?';

    conn.query(sql, id, (err, results) => {
        if (err) {
            return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({
                error: err.message,
            });
        }

        if (results.length === 0) {
            return res.status(StatusCodes.NOT_FOUND).json({
                message: '해당하는 도서가 없습니다.',
            });
        }

        return res.status(StatusCodes.OK).json(results[0]);
    });
};

/books/:id GET
: 파라미터로 아이디를 받아 해당하는 아이디의 도서를 반환한다. 아이디가 존재하지 않으면 404 Not Found를 반환한다.

파라미터로 도서 아이디 3을 받아오자 해당하는 아이디의 도서의 모든 정보가 반환되는 것을 볼 수 있다.

데이터베이스 내에 해당 아이디의 도서가 존재하지 않는다면 404 Not Found 에러를 반환한다.

profile
괜찮은 개발자가 되어 보자

0개의 댓글