fs.readFile()

8342 단어 nodejsBackendBackend
  • node.js는 비동기 이벤트 기반 자바스크립트 런타임이다.
    싱글(단일) 스레드: 한번에 노드js가 실행할 수 있는 건 하나

1. fs 모듈이란?

fs(File System)의 약자로, fs모듈을 설치하면 PC의 파일을 읽거나 저장하는 등의 일을 할 수 있게 도와준다.
node.js에는 컴퓨터의 게산기 기능, 메모장 기능 처럼 기본적으로 세팅되어 있는 내장 모듈이 있다.

자바스크립트 파일을 불러오기 위해 밑에 작성된 키워드를 작성한 것처럼

<script src = ‘파일명’ />

node.js 에서는 내장 모듈을 불러오기 위해 require를 사용한다.

const fs = require(‘fs’); // 파일 시스템 모듈 불러오기
const dns = require(‘dns’); // DNS 모듈을 불러오기

마치 리액트에서 import하여 파일을 불러오는 것과 같다고 볼 수 있다.
그렇다면 node.js에서도 리액트처럼 외부 모듈을 설치 할 수 있을까?

npm -> node package manager 사용

2. fs.readFile

fs.readFile()은 로컬에 존재하는 파일을 읽어오는 메소드다.
fs.readFile은 비동기적으로 파일 내용 전체를 읽으며 세 가지의 인자를 넘길 수 있다.

fs.readFile(path,[option], callback)
  1. path
    첫 번재 인자에 오는 path는 파일 이름을 넘겨주는 인자로서,
<string> || <Buffer> || <URL> || <integer>

총 위의 네 가지의 타입이 올 수 잇는데, 보통은 문자열 타입이 온다고 보면 된다.

  1. options
<object> || <string>

옵셔녈 한 넣어도 되고 안 넣어도 되는 것

  1. callback()
    함수를 인자로 받는 callback()은
err <Error>
data <String> || <Buffer>

err, data를 인자로 받는 데 콜백으로 받은 함수에서 파일을 읽고, 파일을 비동기적으로 실행한다.

위 세 가지를 종합해보면 다음과 같은 형태를 띈다.

fs.readFile(‘text.txt’ , ‘utf8’ , (err,data) => {
  if(err) {
        throw err;
      }
      console.log(data);
});
  • 사용하는 이유

프로그램 실행 시 비동기적으로 처리 할때

  1. callback / 2. promise(resolve,reject) /3. asyvc, await
    세가지가 있다.

이걸 사용하기 전 비동기적 파일을 읽도록 도와주는 게 fs.readFile

const getDataFromFile = function (filePath, callback) {
  //파일을 읽어와야 한다. 
  fs.readFile(filePath,'utf8',(err,data) => {
    //utf8 로 변환한다. 없으면 data는 toString() 작성.
    if(err){
      callback(err,null)
    }else{
      callback(null,data) // or (null,data.toString();)
    }
  });
};

여기서의 에러는 리드파일에서 생성되는 에러이고, 에러가 생성되면(트루가 되면) 에러가 생성된다.

주의할점은, 위의 코드처럼 인자 callback를 불러오고, callback 은 err, data
인자가 두개이기 때문에 어디서 에러처리를 해주고 어디서 데이터 처리를 해줄지
명확하게 표시를 해야한다.
그래서

err => callback(err,null)
data => callback(null,data)

그냥 비어있는 상태의 null 처리를 반드시 해주도록 한다

빈 문자열이나 undefined를 쓰면 그 자체로 데이터 주소 값이 있으므로 제대로 동작하지 못한다

좋은 웹페이지 즐겨찾기