728x90
우선 나는 mongodb ,nodejs 를 쓰고있다.
댓글 관련 해서 로직을 개선중인데
현재 댓글에 deleteAt 값이 존재하는건 댓글의 작성자 이름, 댓글의 내용, 댓글 작성날짜를 null 로 바꿔주는데 문제가 생겼다.
deleteAt 값이있는 댓글들은 정상으로 null 을 띄워주는데 작성자 쪽은 해당 작성자가 여러 댓글을 썼다 예를 들면
하나만 deleteAt 이어서 그 게시글의 작성자 이름을 null 로 바꿔주면 그 작성자의 댓글 데이터들 전부 작성자 이름이 Null 해서 반환된다.
문제점을 찾아보았다.
- forEach 함수로 해당array를 반복문 실행하는데 반복되는 배열들중 조건문으로 빼서 deleteAt 값이 있는것만 추출해서 작성자 이름을 null 로 바꾸는데 왜 모든 작성자 이름이 다 null 뜨는지 이해가 되지않는다.
- 여기서 내가 찾아보고 물어보면서 찾은 거는 참조된 객체라서 그렇다고 들었다.
- ( 문제 해결방법
- 참조를 끊는다
- 객체를 새로 생성한다
- deepclone 을 사용한다
- 여기서 다 봤을때 현제 내가 하고 있는 프로젝트에서는 객체를 새로생성하는거 와 참조를 끊는거는 맞지않았다고 생각했다
- 그래서 deepclone 을 사용하였다.
- {a:0, {b:1}} 여기서 b 가 참조된 형태이다
- 그래서 작성자는 해당 객체안에 객체 이며 참조된 객체
- 그래서 하나만 = null 로 넣어도 나머지 다 null 로 바껴서 돌아온다.
- 하지만 deep clone을 사용하면 원본은 안바뀌고 복사한 객체만 바뀐다.
- 그래서 작성자는 해당 객체안에 객체 이며 참조된 객체
- 현재 프로젝트에 lodash 가 설치 되어있어 cloneDeep 을 썻다. 객체를 복사한후 그 복사한 객체로 반복문 돌려서 내가 원하는 로직으로 수정하였다. 아마 말보다는 직접 보면 이해가 빠를거같다.
- 내가 한말은 정확한게 아니다. 그냥 내가 해보고 이렇구나 해서 이해한 내용이다
- 혹시 잘못된 설명과 내용이 있으면 댓글 달아주시면 정말 감사할것같다.
- 내가 한말은 정확한게 아니다. 그냥 내가 해보고 이렇구나 해서 이해한 내용이다
- 보면 clone_depth0 이 cloneDeep 함수사용하여 복사한 객체이다
- 우선 내가 한방법은 deletAt 값이 있는 객체의 index (위치) 를 추출한다.
- 원본 배열에서 해당 위치에 있는 객체를 제거한다.
- 그후 그자리에 null 바꿔준 객체를 넣어주면
- 해당하는 데이터의 작성자만 null 로 바뀌고 나머지 데이터의 작성자는 똑같은 작성자라도 이름이 잘나온다.
- 끝!
- 그후 그자리에 null 바꿔준 객체를 넣어주면
- 원본 배열에서 해당 위치에 있는 객체를 제거한다.
- 우선 내가 한방법은 deletAt 값이 있는 객체의 index (위치) 를 추출한다.
이 문제를 해결하느라 조금 시간이 걸렸다.
그래도 지식이 한층 더 쌓인거 같아 뿌듯하다. 아직 많이 부족하지만 빨리 실력있는 개발자가 되고싶다.
'dev > 개발일지' 카테고리의 다른 글
프론트는 axios, 서버는 got (예정) (0) | 2021.11.26 |
---|---|
apache-jmeter 오픈소스 테스트 툴 mac (0) | 2021.10.14 |
winston, morgan 함께 사용하여 로깅남기기 (0) | 2021.08.16 |
썸네일 og태그 추출 (0) | 2021.07.22 |
multer , multer-3, s3, sharp, buffer 이미지 최적화(썸네일) (0) | 2021.07.22 |