기타/오류 보관함

[JavaScript] Error: ENOENT: no such file or directory

또야 2021. 7. 13. 16:25
반응형

서버 자바스크립트 부분을 공부하던 중,

fs 모듈을 추출하여 readFileSync 메서드로 

동기적인 파일 읽어들이기 실습을 해보았다.

같은 폴더 내에는 textfile.txt라는 파일과, A.js 라는 파일이 있다.

 

먼저 모듈을 추출하고 파일을 읽어들인 뒤 출력해본다.

동일 폴더 내에 있으니 텍스트 파일명만 입력해준다.

 

 

1
2
3
4
5
6
7
8
9
// fs.readFileSync() 메서드 - 동기적으로 파일 읽어 들이기
 
// 모듈 추출
const fs = require('fs');
 
// 파일을 읽어 들이고 출력
const file = fs.readFileSync('textfile.txt');
console.log(file);
console.log(file.toString());
cs

 

 

웬걸? 잘 작동하지 않는다.

 

파일이나 디렉터리가 존재하지 않는다는 오류가 발생한다.

파일명 철자를 확인해본다. 이상이 없다.

그렇다면 경로의 문제라고 인지한다.

 

 

절대경로 상대경로라는 개념은 다들 아실 것이다.

쉽게 이해해보자면,

'서울시 강남구 테헤란로 티스토리 305호'가 절대 경로가 된다.

반면 '우리 아파트에서 3층 더 위에 있다.'는 상대 경로가 된다.

즉 상대 경로는 어떤 곳의 기준점을 두고 상대적인 경로를 표현하는 것이다.

 

이 문제는,

'내가 작업하고 있는 현재의 디렉토리'를 확인해봐야 한다는 것이다.

 

 

먼저 console.log(process.cwd())로 

프로그램을 실행하고 있는 디렉토리를 확인해준다.

그런 다음, 하위 디렉토리가 있다면 경로에 포함시켜 주는 것이다.

 

★ 1) 예를 들어 A폴더 내의 B폴더에 해당 파일들이 존재하고,

현재 작업 디렉토리가 A라면

fs.readFileSync(A+'/B/textfile.txt'); 를 해주면 된다.

 

★ 2) 편한 방법으로는,

자바스크립트의 전역 변수인 __filename이나 __dirname을 활용하여,

fs.readFileSync(__dirname + '/textfile.txt')를 해주는 것이 있다.

 

 

결론을 말하자면

해당 자바스크립트 파일이 어떤 디렉터리에서 실행 중인지 확인하고,

그에 따른 상대 경로를 적어주든지,

해당 파일들의 __filename, __dirname을 console.log로 확인하여

파일 전체 경로를 fs.readFileSync에 매개 변수로 전달하면 된다.

 

항상 '작업 중인 폴더',

'주 프로그램이 실행되고 있는 곳'을 고려해야 한다는 점을 잊지 말자. 

반응형