fs.rmdir error - ENOENT: no such file or directory, open 'x'
에러
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들만 삭제가 되어 삭제 로직이 잘 돌아간다.