fs.readFile()
- 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)
- path
첫 번재 인자에 오는 path는 파일 이름을 넘겨주는 인자로서,
<string> || <Buffer> || <URL> || <integer>
총 위의 네 가지의 타입이 올 수 잇는데, 보통은 문자열 타입이 온다고 보면 된다.
- options
<object> || <string>
옵셔녈 한 넣어도 되고 안 넣어도 되는 것
- callback()
함수를 인자로 받는 callback()은
err <Error>
data <String> || <Buffer>
err, data를 인자로 받는 데 콜백으로 받은 함수에서 파일을 읽고, 파일을 비동기적으로 실행한다.
위 세 가지를 종합해보면 다음과 같은 형태를 띈다.
fs.readFile(‘text.txt’ , ‘utf8’ , (err,data) => {
if(err) {
throw err;
}
console.log(data);
});
- 사용하는 이유
프로그램 실행 시 비동기적으로 처리 할때
- 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를 쓰면 그 자체로 데이터 주소 값이 있으므로 제대로 동작하지 못한다
Author And Source
이 문제에 관하여(fs.readFile()), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kimdlzp/fs.readFile저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)