"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Node.js에서 `fs.readFile`이 포함된 파일을 읽을 때 `console.log(content)`가 `undefine`을 출력하는 이유는 무엇입니까?

Node.js에서 `fs.readFile`이 포함된 파일을 읽을 때 `console.log(content)`가 `undefine`을 출력하는 이유는 무엇입니까?

2024년 11월 23일에 게시됨
검색:277

Why does `console.log(content)` output `undefined` when reading a file with `fs.readFile` in Node.js?

fs.readFile을 사용하여 데이터 액세스: 비동기 콜백 이해

Node.js 영역에서 fs.readFile을 사용하여 파일을 읽는 것은 비동기적 특성으로 인해 발생하는 문제입니다. 당면한 문제를 자세히 조사하고 이를 해결하기 위한 가능한 접근 방식을 살펴보겠습니다.

파일의 내용을 읽은 다음 콘솔에 기록하는 것을 목표로 하는 다음 코드 조각을 고려하세요.

var content;
fs.readFile('./Index.html', function read(err, data) {
    if (err) {
        throw err;
    }
    content = data;
});
console.log(content);

실행 시 이 코드는 정의되지 않은 로그를 기록하므로 당황스럽습니다. 그 이유를 이해하려면 비동기 콜백의 기본 사항을 파악해야 합니다.

fs.readFile은 비동기식으로 작동합니다. 즉, 파일을 읽는 동안 실행을 차단하지 않습니다. 대신, 파일 읽기 프로세스가 시작된 후 즉시 제어권을 넘겨줍니다. 따라서 코드가 console.log 줄을 실행할 때 파일은 아직 읽히지 않았으며 내용은 정의되지 않은 상태로 유지됩니다.

이 문제를 극복하려면 다음 접근 방식을 따를 수 있습니다.

1. 콜백 함수:

fs.readFile에 전달된 콜백 함수 내부에 나머지 코드를 래핑할 수 있습니다. 이렇게 하면 파일을 읽은 후에만 코드가 실행됩니다.

fs.readFile('./Index.html', function read(err, data) {
    if (err) {
        throw err;
    }
    const content = data;
    console.log(content);
});

2. 도우미 함수:

콜백을 인수로 받아들이고 해당 함수 내에서 원하는 작업을 정의하는 도우미 함수를 만들 수 있습니다. 이는 더 많은 유연성과 구성을 제공합니다.

function processFile(content) {
    console.log(content);
}

fs.readFile('./Index.html', function read(err, data) {
    if (err) {
        throw err;
    }
    processFile(data);
});

3. 약속 기반 접근 방식:

최신 버전의 Node.js에서는 약속을 활용하여 비동기 작업을 처리할 수 있습니다. 다음 코드 조각은 이 접근 방식을 보여줍니다.

const fs = require('fs');

fs.readFile('./Index.html')
  .then(data => {
    console.log(data);
  })
  .catch(err => {
    console.error(err);
  });

fs.readFile의 비동기 특성을 이해하고 적절한 전략을 사용하면 Node.js 파일의 데이터에 효과적으로 액세스할 수 있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3