콜백
Coddy Node.js 여정의 Node.js 기초 섹션에 포함된 레슨. 33개 중 18번째.
큰 파일을 읽는 데는 시간이 걸리며, 파일을 기다리며 멈춰 있는 프로그램은 그동안 다른 작업을 하지 않습니다.
fs.readFile(path, 'utf8', callback)은 읽기를 시작하고 즉시 반환합니다. 파일이 로드되면 Node는 (err, text)를 전달해 콜백을 호출합니다. 성공하면 err는 null이고, 그렇지 않으면 오류이므로 먼저 확인하세요. 텍스트가 필요한 모든 작업은 콜백 안에 넣습니다.
import fs from 'node:fs';
fs.readFile('poem.txt', 'utf8', (err, text) => {
if (err) {
console.log('No poem today');
return;
}
console.log(text.split('\n').length + ' lines');
});
console.log('Asked for the poem');Asked for the poem이 먼저 출력됩니다. readFile 다음 줄은 파일이 아직 로드되는 동안 실행됩니다.
챌린지
쉬움이 레슨에서는 Handling Errors의 노트 도구 파일 대신, 콜백으로 개수를 세는 새로운 예제를 count.js에서 시작합니다. 제공된 notes.json, notes.js, store.js가 포함되어 있으며, 이전 작업은 해당 레슨에 그대로 저장되어 있습니다.
큰 파일을 읽으려면 시간이 걸립니다. 콜백을 사용하면 Node는 그동안 다른 작업을 할 수 있고, 파일을 사용할 준비가 되면 여러분의 코드를 호출합니다. 파일에 있는 노트의 개수를 세는 작은 별도 프로그램 count.js에서 이를 연습해 보세요.
count.js는 이미Reading...을 출력하고 어떤 파일을 읽을지도 알고 있습니다.file은node count.js뒤에 입력한 단어이거나, 아무것도 입력하지 않았을 때는notes.json입니다.fs.readFile과 콜백을 사용해 해당 파일을 읽으세요. 아래의 모든 작업은 콜백 안에서 이루어집니다.- 읽기에 성공했다면
JSON.parse를 사용해 텍스트를 배열로 바꾸세요. 배열에 들어 있는 노트의 개수를 세어notes를 뒤에 붙여 출력하세요. 파일의 줄 수가 아니라 배열의 노트 수를 세세요.notes.json에는 노트가 두 개 있으므로2 notes를 출력합니다. - 읽기에 실패했다면, 즉 콜백의 오류가
null이 아니라면 개수 대신Cannot read뒤에 파일 이름을 붙여 출력하세요. - 두 경우 모두 콜백 안에서 마지막에
Done을 출력하세요.
node count.js를 실행하면 다음을 출력합니다.
Reading...
2 notes
Donenode count.js nothere.json를 실행하면 다음을 출력합니다.
Reading...
Cannot read nothere.json
Done직접 해 보세요: 이 레슨에서는 count.js를 실행하므로 터미널에 $ node count.js가 표시됩니다. 입력란을 비워 둔 채 ‘플레이’를 누르면 프로그램이 notes.json을 읽습니다. 그런 다음 입력란에 nothere.json을 입력하고 Enter를 눌러 존재하지 않는 파일을 읽어 보세요.
직접 해보기
import fs from 'node:fs';
const file = process.argv[2] ?? 'notes.json';
console.log('Reading...');
// fs.readFile과 콜백을 사용해 파일을 읽으세요.
// 노트의 개수를 출력한 다음 Done을 출력하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
Node.js 기초의 모든 레슨
직접 연습해 보세요: Express 플레이그라운드