NodeJS fs 모듈

lim1313·2021년 9월 8일
0

TILPLUS

목록 보기
18/40

fs 모듈

  • 파일 처리와 관련된 작업을 하는 모듈로, FileSystem을 의미
  • 메소드들은 동기/비동기로 나뉘며, Sync라는 이름이 붙어있는 메소드가 동기방식을 사용

3가지 형태

1. renameSync(....)

: 동기,콜백함수 return X

2. rename(oldpath, newpath, callback)

: 비동기, 모든 작업이 완료되면 callback 실행

3. fs.promises.rename().then().catch()

: promise형태로 사용. error 처리를 위해 꼭 catch를 써준다.


1. Sync(...) : 동기

try{ renameSync( ... ) } catch(e){console.error(e)}

: 동기적으로 실행되어 모두 실행될 때까지 다음으로 넘어가지 않는다.
: 따로 콜백함수 지정하지 않는다.
: renameSync는 동기적으로 실행되므로 try, catch로 에러를 잡아주지 않으면, 에러가 발생했을 때 뒤의 실행이 되지 않는다. 때문에 sync일 경우 try, catch를 꼭 사용해야 한다.

try {
  fs.renameSync('./sub22.html', './sub.js');
} catch (err) {
  console.error(err);
}
console.log('END AFTER');
// try catch로 잡아주지 않으면, error 발생시 console.log('END AFTER');이 실행되지 않는다.

2. rename(oldpath, newpath, callback) : 비동기

  • 비동기로 실행된다.
  • 모든 작업이 완료되면 결과를 받아 콜백함수를 실행한다.
  • 비동기로 작성한다면, 콜백함수를 통해 적절한 error처리를 해주어야 한다.
// rename
fs.rename('./sub.js', './subsub.js', (err) => {
  console.log(err);
});

console.log('1');
console.log('2');

// readFile
fs.readFile('./text.txt', 'utf8', (err, res) => {
  if (err) {
    console.error(err);
  } else {
    console.log(res);
  }
});

rename과 readFile 모두 비동기로 실행되기 때문에, rename이 먼저 실행될지, readFile이 먼저 실행될지 알 수 없다.

fs.promises.rename().then().catch() : 비동기

  • const fs = require('fs').promises와 같이 모두 promises로 불러올 수 있다.
  • import { promises as fsPromises } from 'fs'
  • promise로 동작하기 때문에, 비동기적으로 실행된다.
  • error를 반드시 catch로 잡아주어야한다.

const fs = require('fs')로 불러온 경우 아래와 같다.

const fs = require('fs');

fs.promises
  .readFile('./text.txt', 'utf8')
  .then((data) => console.log(data))
  .catch((err) => console.error(err));

console.log('this is console.log');

//this is console.log
//this is text.txt

const fs = require('fs').promises로 불러온 경우 아래와 같다.

const fs = require('fs').promises;

fs.readFile('./text.txt', 'utf8')
  .then((data) => console.log(data))
  .catch(console.error);
  
fs.writeFile('./text.txt', 'hello hello hello')
   .catch(console.error);

fs 메소드

const fs = require('fs').promises로 불러온 경우를 기준으로 예시 작성

모든 메소드는 비동기적으로 실행된다.
때문에, appendFiled이 되기 전에 복사가 완료될 수도 있고, 의도한 결과가 나오지 않을 수 있다.

fs.readFile

기본적으로 Buffer로 읽어온다. utf8와 같이 옵션을 설정해 줄 수 있다.

fs.readFile('./text.txt', 'utf8')
  .then((data) => console.log(data))
  .catch(console.error);

fs.writeFile

  • writeFile은 promise이기 때문에 아무것도 리턴해주지 않는다.
  • 하지만, catch는 반드시 해주어야 한다.
fs.writeFile('./text.txt', 'hello hello hello')
  .catch(console.error);

fs.appendFile

  • 해당 파일의 기존 내용에 추가해준다.
fs.appendFile('./text.txt', 'yoyoyo').catch(console.error);

fs.copyFile

  • 파일 복사
fs.copyFile('./text.txt', './text2.txt').catch(console.error);

fs.mkdir

  • 디렉토리 생성, return 값 없음
fs.mkdir('sub-folder') //
  .catch(console.error);
  • 파일 삭제
fs.unlink('./text2.txt') //
  .catch(console.error);

fs.readdir

  • 해당 경로의 파일명들을 스트링 배열의 형태로 return
fs.readdir('./') //
  .then(console.log)
  .catch(console.error);
profile
start coding

0개의 댓글