스택
1. node.js / express.js
2. mongoDB / mongoose
상황
1. 프론트에서 request body로 update할 input 값을 넘겨줌
2. 스키마에 넣기 전, 입력된 input 값이 없는 필드를 지우고 update 객체에 담고자 함
mongoose의 경우 input 값이 없는 필드가 입력되었을 때 기존의 값 대신 빈 값을 넣어버리기 때문.
방식
1. 나머지 변수 + 단축 평가
const { field1, field2, ..., fieldLast } = req.body
const toUpdate = {
...( field1 && { field1 }),
...( field2 && { field2 }),
...,
...( fieldLast && { fieldLast }),
}
2. Object.keys() + delete object[key]
const toUpdate = req.body;
for (let key of Object.keys(toUpdate)) {
if (!toUpdate[key]) {
delete toUpdate[key];
}
}
비교
1. 실무 활용 측면
1번의 경우
a. 필드 명을 확인할 수 있음.
b. 개별 필드 값을 수정하는 등 별도의 작업을 거칠 경우에 적합함
2 번의 경우
a. 간단한 코드
b. 프론트에서 넘어온 값을 그대로 넘길 때 적합함.
2. 코드 관리 및 개선 측면
1번의 경우
a. 백엔드에서 특정 값을 수정해야하는 작업이 추가되면 코드 수정에 용이함.
2번의 경우
a. 필드가 사라지거나 이름이 바뀌어도 코드를 수정할 필요가 없음.
3. 메모리 측면
2번의 경우 Object.keys라는 새 배열을 만든다는 점에서 1번보다 많은 메모리를 잡아먹음.
정리
1번
- 프로젝트가 계속 바뀌고 개선되는 경우
- 백엔드에서 값을 바꾸고 스키마로 넘기는 경우
2번
- 프로젝트가 완성되고 더 이상 바뀔 여지가 없는 경우
- 백엔드에서 값을 다루지 않고 그대로 넘기는 경우
'Web' 카테고리의 다른 글
[Express] body parser? urlencoded? (0) | 2022.08.24 |
---|---|
[CORS] CSR에서 google oauth2.0 적용기 (0) | 2022.07.29 |
[Express] request 객체에 object 담기 (0) | 2022.07.01 |
MVC 패턴 Service의 존재 가치 (0) | 2022.06.23 |
[Express] mySQL ?와 SET query (0) | 2022.05.17 |