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" });
}
)
})
존재하면
이라는 조건이 필요한가에 대해 의문이 들었다... 라고 그땐 생각했었구나
이제는 왜 존재하면
이라는 조건이 붙어야 하는지 안다.
if문을 넣으면, 좋아요가 있을 때 호출하면 좋아요를 취소하고
좋아요가 없을 때 호출하면 좋아요를 추가하는 하나의 API
를 구현할 수 있다.
존재하면
👉 SELECT EXISTS(SELECT * FROM 테이블 WHERE 조건) ;
당시 raw 쿼리와 TypeORM 풀링 기능으로 작성할 때 다음과 같은 착각을 했다
착각
1. req.body 로 받은 값은 물음표?
와 대괄호[]
로 작성해야 한다
2. req.params 로 받은 값은 백틱(`)과 중괄호${}
로 작성해야 한다
물음표와 대괄호로 작성 시, api 요청에 에러가 발생하는 경우가 있는데
그 조건을 찾으려고 시도한 결과였다
지금도 왜? 라는 질문에 확실한 이유를 답하긴 어렵지만 어떤 규칙은 찾았다
로우쿼리를 DB에 매칭시켜 실행한 결과를 활용하는 방법
- 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 }); });})
- 변수에 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() })