티스토리 뷰
Model 패턴을 통해 json 파일에 받아온 파라미터를 저장하는 것은 이전 포스팅에서 다루었다
그렇다면 삭제는 어떻게 할 수 있을지 살펴보자.
먼저 삭제는 1. 정보가 배열에 저장되어있는 경우 2. 정보가 객체에 저장되어있는경우로 나눌 수 있을 것 같다.
먼저, 정보가 배열에 저장되어있는 경우는 비교적 삭제하는것이 간단하다.
- id값을 통해서 해당 배열 내의 삭제할 요소를 찾는다.
- update되는 array에 filter 메서드를 통해 해당 요소를 빼고 다 저장해준다.
- 파일에 write한다.
static delete(id){
getProductfromFile(products=>{ //file에있는 모든 정보를 가져오는 함수에 인자로 콜백
const product= products.find(p => p.id===id); //삭제할 id에 해당하는 값 찾아옴
const updatedProduct = products.filter(p=> p.id!==id); //updated에 해당 값 빼고 저장
fs.writeFile(p, JSON.stringify(updatedProduct), (err)=>{ //다시 파일에 저장
if(err) console.log(err);
});
});
}
두번째 정보가 객체에 저장된 경우는 수정과 삭제 시 아예 새로운 객체에다 원래의 정보를 저장해놓아야한다.
예를들면 아래와같은 객체가 있을 때는
{"products":[{"id":"0.48110850310112285","qty":1}],"totalPrice":20.18}
1.객체 전체의 정보를 update할 새로운 객체에 저장한다.
2. value가 배열인 경우, filter 메서드를 이용해 삭제해준다.
3. 파일에 wirte한다.
fs.readFile(p,(err,fileContent)=>{
if(err) return;
let cart =JSON.parse(fileContent); //파일의 내용 파싱
const updatedCart = {...cart}; //파싱한 파일의 내용을 복사한다.
const product= updatedCart.products.find(prod => prod.id === id);
//삭제할 id에 해당하는 prdocut 찾기
if(!product) return; //해당 product가 없으면 return
updatedCart.products = updatedCart.products.filter(prod=> prod.id !== id);
//product의 value가 배열이므로 해당 키값은 filter메서드를 사용해서 삭제해준다.
updatedCart.totalPrice = updatedCart.totalPrice- (price* removedQty);
fs.writeFile(p, JSON.stringify(updatedCart),(err)=>{
//파일에 다시 저장
console.log(err);
});
});
'web : back-end > node js' 카테고리의 다른 글
[node js] Express: MongoDB 데이터베이스 연동 (0) | 2020.07.05 |
---|---|
[node js] Express: 데이터베이스 연동 - Sequelize (0) | 2020.06.26 |
[node js] Express: 동적 페이지 처리하기 (0) | 2020.06.23 |
[node js] Express: Model 에서 file형태로 데이터 저장 및 읽어오기 (0) | 2020.06.21 |
[node js] Express: MVC 패턴 (0) | 2020.06.21 |
댓글