BE_Westagram_TIL_11.8

송철진·2022년 11월 8일
0

Toy Project

목록 보기
4/10

좋아요 누르기 취소

app.delete("/likeDelete/:userId/:postId", async(req, res, next)=>{
    const { userId, postId } = req.params;
    await appDataSource.query(
        `DELETE 
            FROM likes
            WHERE user_id=${userId} and post_id=${postId};`
        , (err, rows) => {
            res.status(200).json({ message : "likesDeleted" });
        }
    )
})

TIL_edited(01.17)

  1. select문에 where절에 조건을 부여할 때
    where id=1을 주고 싶다면?
    const {id} = req.body 가 아니라
    const {id} = req.params 를 주고
    백틱(``)안에 where id = ${id} 이런 식으로 입력하자
    참고

  1. <입력한 userId와 postId가 존재하면, 해당 데이터를 삭제하라>.. 라고 할 때
    과연 존재하면이라는 조건이 필요한가에 대해 의문이 들었다
    존재하면 어쨌든 삭제 명령어에 삭제될 것이고
    존재하지 않으면 어쨌든 테이블에 변화는 없다..

... 라고 그땐 생각했었구나
이제는 왜 존재하면이라는 조건이 붙어야 하는지 안다.
if문을 넣으면, 좋아요가 있을 때 호출하면 좋아요를 취소하고
좋아요가 없을 때 호출하면 좋아요를 추가하는 하나의 API를 구현할 수 있다.

존재하면 👉 SELECT EXISTS(SELECT * FROM 테이블 WHERE 조건) ;


  1. 착각

당시 raw 쿼리와 TypeORM 풀링 기능으로 작성할 때 다음과 같은 착각을 했다

착각
1. req.body 로 받은 값은 물음표?와 대괄호[]로 작성해야 한다
2. req.params 로 받은 값은 백틱(`)과 중괄호 ${}로 작성해야 한다

물음표와 대괄호로 작성 시, api 요청에 에러가 발생하는 경우가 있는데
그 조건을 찾으려고 시도한 결과였다

지금도 왜? 라는 질문에 확실한 이유를 답하긴 어렵지만 어떤 규칙은 찾았다

로우쿼리를 DB에 매칭시켜 실행한 결과를 활용하는 방법

  1. query() 메소드의 매개변수인 콜백함수(err, rows)=>{}로 rows 객체에 담긴 값을 활용
app.get("/posts", async(req, res, next) => {
    await dataSource.query(
        `SELECT 
            users.id as userId, 
            users.profile_image as userProfileImage, 
            posts.id as postingId, 
            posts.image_url as postingImageUrl, 
            posts.content as postingContent 
        FROM users 
        INNER JOIN posts 
        ON users.id = posts.user_id
        `, (err, rows) => {
            res.status(200).json({ "data" : rows });
        });})
  1. 변수에 await한 결과를 할당하여 변수를 활용
    • 물음표(?)와 대괄호([ ])로 작성 시, 꼭이라고 해도 좋을만큼 await를 마치고 다음 줄에 작성한다.
app.delete("/posts/:postId", async(req, res, next) => {
    const { postId } = req.params;
    await dataSource.query(
        `DELETE 
            FROM posts
            WHERE id = ?; 
        `, [postId],
    );
    res.status(204).send()    
})
profile
검색하고 기록하며 학습하는 백엔드 개발자

0개의 댓글