Express와 TypeORM이 적용된 CRUD API 만들기

yunny·2023년 1월 23일
0

westudy

목록 보기
8/15

1. 데이터베이스 테이블 생성

$ dbmate new create_테이블이름
$ dbmate up

2. CRUD API작성

create / read / update / delete

1) 정보 생성 엔드포인트 구현 (POST)

 app.post(//(1) '/books', async (req, res) => {
     //(2) const { title, description, coverImage} = req.body
    
	await myDataSource.query(
	 //(3) `INSERT INTO books(
		    title,
		    description,
		    cover_image
		) VALUES (?, ?, ?);
		`,
		[ title, description, coverImage ]
	); 
     res.status(201).json({ message : "successfully created" });
	})

(1) /books

의도한 자원이 '책', path 매개변수 자리이기 때문에

(2) const { title, description, coverImage} = req.body

req, res 객체를 통해 post 메소드 전송시 함께 들어온 body에 담긴 내용 구조 분해 할당
mysql의 snake_case와 JavaScript의 camelCase 주의!

(3) SQL Ras Query문 작성


2) 정보 조회 엔드포인트 구현 (GET)

app.get(//(1) '/books', async(req, res) => {
    await myDataSource.query(
	//(2) `SELECT 
            books.id,
            books.title,
            books.description,
            books.cover_image,
            authors.first_name,
            authors.last_name,
            authors.age
        FROM books_authors ba
        INNER JOIN authors ON ba.author_id = authors.id 
        INNER JOIN books ON ba.book_id = books.id`
		,(err, rows) => {
      res.status(200).json(rows);
	});
});

(1) /books

의도한 자원이 '책', path 매개변수 자리이기 때문에

(2) SQL Raw Query문 작성

중간 테이블을 갖고 있기 때문에 테이블의 관계를 생각하여 query문 작성해야함

3) 정보 수정 엔드포인트 구현 (PUT)

app.put(//(1) '/books', async(req, res) => {
 //(2) const { title, description, coverImage, bookId } = req.body
    
	await myDataSource.query(
	 //(3) `UPDATE books
		    SET 
		        title = ?,
		        description = ?,
			cover_image = ?,
			WHERE id = ?
		`,
		[ title, description, coverImage, bookId ]
	); 
      res.status(201).json({ message : "successfully updated" });
	});

(1) /books

의도한 자원이 '책', path 매개변수 자리이기 때문에

(2) const { title, description, coverImage, bookId} = req.body

req, res 객체를 통해 put 메소드 전송시 함께 들어온 body에 담긴 내용 구조 분해 할당
mysql의 snake_case와 JavaScript의 camelCase 주의!

(3) UPDATE - SET - WHERE

DB에 입력 및 수정하기 원하는 내용을 테이블에 반영할 수 있도록 쿼리문 작성

4) 정보 삭제 엔드포인트 구현 (DELETE)

app.delete(//(1) '/books/:bookId', async(req, res) => {
 //(2) const { bookId } = req.params;

    await myDataSource.query(
 //(3) `DELETE FROM books
		WHERE books.id = ${bookId}
		`); 
     res.status(204).json({ message : "successfully deleted" });
	});

(1) /books/:bookId

타겟 엔드포인트 설정(bookId) : 클라이언트 선에서 뒷 부분에 책의 id 값을 의도대로 기입할 수 있도록 설정

(2) const { bookId } = req.params;

req 객체에 담겨 전송된 path parameter 정수값을 읽어올 수 있도록
req.params 내부의 정수값을 bookId 변수에 할당

(3) DELETE - WHERE

DB에 입력 및 삭제하기 원하는 내용을 테이블에 반영할 수 있도록 쿼리문 작성

profile
기록하지 않으면 잊어버려요 !

0개의 댓글

관련 채용 정보