codestates / codestates/GongJang
[ ✍️ Dev Log] 양진영 / 2021-12-02
- Dominant language
- JavaScript
- Stars
- 0
- Forks
- 2
- PR merge metrics
- No merged PRs in 30d
Description
### 오늘은 어떻게 프로젝트에 기여했나요?
- 유저가 게시글 목록 중 하나를 상세히 보고자 할 때, 필요한 데이터를 클라이언트에 전송할 수 있도록 서버 구현
- 유저가 게시글 목록 중 하나를 상세히 보고자 할 때, 회원/비회원 구분이 필요한 작업(회원의 경우, 해당 게시글을 wish리스트에 저장했으면 해당 데이터 또한 필요함) 마무리
- 메인페이지에서 게시글 리스트업에 필요한 데이터를 클라이언트에 전송할 수 있도록 서버 구현
### 오늘의 프로젝트에서 힘든 점은 무엇인가요?
오늘의 하이라이트는 비동기 처리 였습니다.
1차 조회한 데이터를 가공하고, 이를 2차,3차 가공처리가 필요한 작업을 기존의 then / catch 비동기 처리방식을 사용하다 보니, 코드가 길어져 에러가 발생해도 원인을 찾는 것이 쉽지 않았습니다. 이전에는 비동기 처리의 중요성을 알았어도, 구현 과정에서 코드가 길었던 경험이 없어 크게 와 닿지 않았었는데.. 오늘 그 때 제대로 학습하지 않았던 것이 후회됐습니다. 그래도, 오늘의 '삽질'을 통해서 실제로 제가 구현하고 싶은 방향으로 비동기 처리할 수 있겠다는 자신감이 생긴 하루였습니다. 오늘 저를 가장 힘들게 했던, 배열 비동기 처리 방법을 아래 레퍼런스 코드로 올립니다.
```javascript
Post.findAll()
.then(async result => {
// console.log(result);
const responseData = await Promise.all(
result.map(async post => {
let postData = post.dataValues;
const writerId = postData.user_id;
// Sequelize 쿼리는 스코프 밖의 변수에 영향을 줄 수 없다?? 노노
// 아아!! 비동기 처리기 때문에 undefined 상태에서 처리가 될 수 있구나
return await User.findOne({ where: { id: writerId } })
.then(async result => {
const userInfo = result.dataValues;
writerEmail = userInfo.email;
writerNickname = userInfo.nickname;
if (userId) {
// 2-1. 회원인 경우.
return await Wish.findOne({
where: {
user_id: userId,
post_id: postData.id
}
})
.then(result => {
// 2-1-1. 회원이면서 좋아요를 누른 경우.
if (result) {
postData.writer = {
writer_email: writerEmail,
writer_nickname: writerNickname
};
postData.wish = true;
delete postData.user_id;
// console.log(postData);
return postData;
} else {
// 2-1-2. 회원이지만, 좋아요를 누르지 않은 경우.
postData.writer = {
writer_email: writerEmail,
writer_nickname: writerNickname
};
postData.wish = false;
delete postData.user_id;
// console.log(postData);
return postData;
}
})
.catch(err => {
console.log(err);
res.status(500).send("서버에 오류가 발생했습니다")
})
} else {
// 2-2. 비회원인 경우.
postData.writer = {
writer_email: writerEmail,
writer_nickname: writerNickname
};
postData.wish = false;
delete postData.user_id;
return postData;
}
})
.catch(err => {
console.log(err);
res.status(500).send("서버에 오류가 발생했습니다")
})
})
)
console.log(responseData);
res.status(200).json(responseData);
})
.catch(err => {
console.log(err);
res.status(500).send("서버에 오류가 발생했습니다")
})
```
### 내일은 프로젝트에 기여하기 위해 무엇을 해야 하나요?
- [x] 유저가 좋아요를 클릭 한 게시글을 모아볼 수 있도록 서버 기능 구현
- [x] 유저가 게시글에 댓글을 쓸 수 있도록 댓글 작성 기능 구현
- [x] 게시글에 쓰여진 댓글을 조회할 수 있도록 댓글 조회 기능 구현
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.