Node.js에서 파일 읽기

Shraddha Paghdar 2023년10월12일
Node.js에서 파일 읽기

이 짧은 기사에서는 Node.js에서 파일을 읽는 방법을 배웁니다.

Node.js에서 파일 읽기

fs 모듈은 파일 시스템 액세스 및 상호 작용을 위한 많은 유용한 기능을 제공합니다. fs 모듈의 특별한 기능은 모든 메서드가 기본적으로 비동기식이지만 동기화를 추가하여 동기식으로 작동할 수도 있다는 것입니다.

fs.readFile()을 사용하여 Node.js에서 파일을 읽습니다. 파일 데이터 또는 오류를 호출하려면 파일 경로, 인코딩 및 콜백 함수를 전달해야 합니다.

fs.readFile() 메소드는 파일을 읽는 데 사용되는 내장 메소드입니다. 전체 파일을 버퍼로 읽습니다. require() 메서드는 const fs = require('fs')와 같은 모듈을 로드하는 데 사용됩니다.

통사론:

fs.readFile(filename, encoding, callbackFn)

이 메서드는 세 가지 매개 변수를 허용합니다.

  1. filename - 이 필수 매개변수는 읽을 파일의 이름 또는 다른 위치에 저장된 경우 전체 경로를 보유합니다.
  2. encoding - 이 매개변수는 파일의 인코딩을 보유하는 필수 매개변수입니다. 기본값은 utf8입니다.
  3. callbackFn - 이 콜백 함수는 파일을 읽은 후에 호출됩니다. errdata라는 두 개의 매개변수를 사용합니다.
callbackFn 매개변수 설명
err 파일을 읽는 동안 오류가 발생한 경우.
data 읽고 있는 파일의 내용입니다.

내용, 파일에 저장된 데이터를 반환하거나 파일을 읽는 동안 오류가 발생했습니다. 예를 들어 이해해 봅시다.

암호:

const fs = require('fs');
fs.readFile('/helloworld.txt', 'utf8', (err, data) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log(data);
});

출력:

Hello DelftStack readers!

또 다른 옵션은 동기 버전 fs.readFileSync()를 사용하는 것입니다.

암호:

const fs = require('fs');
try {
  const fileContent = fs.readFileSync('/helloworld.txt', 'utf8');
  console.log(fileContent);
} catch (err) {
  console.error(err);
}

출력:

Hello DelftStack readers!

fs/promises 모듈에서 제공하는 fsPromises.readFile() 메서드를 사용할 수도 있습니다.

암호:

const fsPromises = require('fs/promises');

async function FileReadFn() {
  try {
    const fileContent =
        await fsPromises.readFile('/helloworld.txt', {encoding: 'utf8'});
    console.log(fileContent);
  } catch (err) {
    console.log(err);
  }
}
FileReadFn();

출력:

Hello DelftStack readers!

fs.readFile(), fsPromises.readFile()fs.readFileSync() 세 가지 모두 데이터를 반환하기 전에 파일의 전체 내용을 메모리로 읽습니다. 즉, 대용량 파일은 메모리 사용량과 프로그램 실행 속도에 큰 영향을 미칩니다.

파일 읽기가 완료될 때까지 기다리는 대신 보낼 준비가 된 데이터가 있는 즉시 HTTP 클라이언트로 스트리밍을 시작합니다. 스트림은 본질적으로 다른 데이터 처리 방법을 사용하는 것보다 두 가지 주요 이점을 제공합니다.

  1. 메모리 효율성 - 처리하기 전에 많은 양의 데이터를 메모리에 로드할 필요가 없습니다.
  2. 시간 효율성 - 전체 페이로드를 사용할 수 있을 때까지 기다리지 않고 즉시 처리를 시작할 수 있으므로 데이터 처리를 시작하는 데 훨씬 적은 시간이 걸립니다.

파일 스트림에서 pipe() 메서드가 호출되고 소스를 가져와 목적지로 보냅니다. 대상 스트림은 pipe() 메서드의 반환 값이며 pipe()에 대한 여러 호출을 함께 연결할 수 있는 매우 편리한 것입니다.

암호:

const fs = require('fs');
const http = require('http');

const nodeServer = http.createServer((req, res) => {
  const fileStream = fs.createReadStream(`${__dirname}/helloworld.txt`);
  fileStream.pipe(res);
});
nodeServer.listen(3000);

출력:

Hello DelftStack readers!
Shraddha Paghdar avatar Shraddha Paghdar avatar

Shraddha is a JavaScript nerd that utilises it for everything from experimenting to assisting individuals and businesses with day-to-day operations and business growth. She is a writer, chef, and computer programmer. As a senior MEAN/MERN stack developer and project manager with more than 4 years of experience in this sector, she now handles multiple projects. She has been producing technical writing for at least a year and a half. She enjoys coming up with fresh, innovative ideas.

LinkedIn