본문 바로가기
All Side/Runtime > NodeJS

fs.rmdir error - ENOENT: no such file or directory, open 'x'

by developerBeluga 2023. 4. 5.
728x90
반응형

 

 

에러

    if (files) {
      for (const file of files) {
        formData.append(file.fieldname, fs.createReadStream(file.path), { filename: file.originalname });
      }
      formData.append('data', body);

      fs.rmdir('uploads/run', { recursive: true }, err => {
        if (err) {
          console.log('file 삭제 오류: ', err);
        } else {
          console.log('file 삭제 완료');
        }
      });
    }

솔직히 말해서 ENOENT: no such file or directory, open 'x'라는 에러문구는 심플하다. 경로에 적힌 대로 갔는데 파일이 없다는 것이다.

 

하지만 위 코드를 보면 알겠지만 fs.rmdir가 실행되는 순서는 formData로 파일들을 이미 append 해준 다음이다. 순서에 문제가 있는 줄 알고 if문 밖에 fs.rmdir을 해봐도 똑같은 현상이 나온다.

 

웃긴건 처음 실행할 때는 오류 없이 잘 동작한다.

 

 

원인

디렉토리 자체를 삭제하면서 일어나는 에러였다. 처음 실행할 때는 디렉토리가 존재하기 때문에 문제가 없었던 것이다. 두번째 실행에서는 디렉토리 자체가 없어졌기 때문에 오류 메시지를 볼 수 있었다.

 

 

해결

디렉토리는 삭제하지 않으면서 디렉토리 안에 있는 파일들을 삭제하는 방법이 무엇 있을까?

fs-extra 모듈을 사용하는 것이다.

 

https://www.npmjs.com/package/fs-extra

 

fs-extra

fs-extra contains methods that aren't included in the vanilla Node.js fs package. Such as recursive mkdir, copy, and remove.. Latest version: 11.1.1, last published: 15 days ago. Start using fs-extra in your project by running `npm i fs-extra`. There are 5

www.npmjs.com

 

 

fsExtra.emptyDirSync('uploads/run');

아주 간단하게 file들만 삭제가 되어 삭제 로직이 잘 돌아간다.

 

 

 

 

 

728x90
반응형

댓글