요즘 Node js를 작업을 하다 보니 글쓸 주제가 생기네요 ^^

Node JS에서 fs 패키지를 이용해서 파일을 다룹니다.

그런데, 파일에 텍스트 파일을 쓰는 것은 writeFile 함수를 사용하면 됩니다.

그런데 저 함수를 써서 파일을 작성하면 여러번 동일한 파일에 쓸때 맨 마지막 텍스만 저장 됩니다.

하지만, 루프를 통해서 같은 파일에 다른 데이터를 저장해야 할 경우도 있습니다.

그때 사용할 수 있는 명령어가 함수가 appendFile() 입니다.

실제로 사용하는 방법은 아래와 같습니다.

let fd;
try {
fd = fs.openSync('message.txt', 'a');
fs.appendFileSync(fd, 'data to append', 'utf8');
} catch (err) {
/* Handle the error */
} finally {
if (fd !== undefined)
fs.closeSync(fd);
}

출처 : stackoverflow.com/questions/3459476/how-to-append-to-a-file-in-node

https://nodejs.org/api/fs.html#fs_fs_appendfile_path_data_options_callback

어제 한참을 삽질을 했습니다. 

 

node js에서 rs.readFile 함수로, 30만개정도의 파일 일어서 S3로 보내는 작업을 했습니다. 

 

그런데 중간에

 

Error: EMFILE: too many open files

 

위와 같은 오류가 났습니다. 

 

그래서 해결 책을 열심히 찾았습니다. 

 

보통은 fp 라고 하는데 node js 는 fd라고 한다는 것도 알게 되었고, 

 

node js fs 패키지를 많이 사용하는데 fs.readFile함수를 이용했을 때 많은 파일을 열면 이렇게 나옵니다. 

 

여기서 해결 방법은 출처에 있는 글 처럼 

 

node js graceful-fs 패키지를 이용하면 됩니다. 

 

fs=rqquire("fs")

를 

fs=rqquire("graceful-fs")

로 변경하고 동일 하게 사용하면 저 오류가 안납니다. 

 

감사합니다. 

 

출처 : https://stackoverflow.com/questions/49672964/nodejs-too-many-open-files-causes-an-error

+ Recent posts