티스토리 뷰

web : back-end/node js

[node js] Express: 저장된 파일 내용 삭제하기

무니웜테일패드풋프롱스 2020. 6. 24. 19:37

Model 패턴을 통해 json 파일에 받아온 파라미터를 저장하는 것은 이전 포스팅에서 다루었다 

 

[node js] Express: Model 에서 file형태로 데이터 저장 및 읽어오기

기존에 MVC 패턴 구현에서 한걸음 더 나아가, Model 에서 클라이언트로부터 받아온 파라미터를 array로 저장하지 않고 file로 저장해보도록 한다. models / product.js 파일 ( product 관련 데이터를 다루는 ��

moonheekim-code.tistory.com

그렇다면 삭제는 어떻게 할 수 있을지 살펴보자.

먼저 삭제는 1. 정보가 배열에 저장되어있는 경우 2. 정보가 객체에 저장되어있는경우로 나눌 수 있을 것 같다.

먼저, 정보가 배열에 저장되어있는 경우는 비교적 삭제하는것이 간단하다.

  1. id값을 통해서 해당 배열 내의 삭제할 요소를 찾는다.
  2. update되는 array에 filter 메서드를 통해 해당 요소를 빼고 다 저장해준다.
  3. 파일에 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);
            });
        });

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함