본문 바로가기

Learn/과제

Node.js fs 모듈 과제

Node.js

 

비동기 이벤트 기반 JavaScript 런타임

 

모듈

한 시스템을 여러 개의 기능적 구성요소(모듈)들을 조합함으로써 완성하도록 한 설계

-> Node.js 모듈은 비동기 작동을 한다.

 

외장 모듈

  • 일반 Node.js 개발자들이 만들어 놓은 모듈(라이브러리)입니다.
  • 외장 모듈을 사용하기 위해서는 npm( Node Package Manager )을 사용합니다. 

내장 모듈

  • Node.js를 설치하고 나면 그 안에 이미 제공되어지는 모듈을 의미합니다.
  • 내장 모듈은 이미 Node.js를 설치할 때 존재하기 때문에 npm을 사용하지 않습니다.

 

 

Node : fs 모듈 File system

node:fs모듈을 사용하면 표준 POSIX 기능을 모델링한 방식으로 파일 시스템과 상호 작용

 

참조 https://nodejs.org/dist/latest-v16.x/docs/api/fs.html#file-system

 

Node.js 에서는 이런식으로 내장된 모듈을 불러올 수 있다. -> javascript로 따지면 내장 메서드?

const fs = require('fs'); // 파일 시스템 모듈을 불러옵니다
const dns = require('dns'); // DNS 모듈을 불러옵니다

// 이제 fs.readFile 메서드 등을 사용할 수 있습니다!

 

fs.readFile(path[, options], callback)

 

파일의 전체 내용을 비동기식으로 읽는다.

path

 파일의 경로

[, options]

생략가능

Object와 String type을 사용한다 표기됨.

callback

사용되는 콜백 함수

 

const fs = require("fs");

const getDataFromFile = function (filePath, callback) {
  // 구현하세요

  fs.readFile(filePath, 'utf8', (err, data) => {
    if (err) {
      callback(err, null);
    } else {
      callback(null, data);
    }
  });
};

 

Promise

let promise = new Promise((resolve, reject) => {
	// 1. 정상적으로 처리되는 경우
	// resolve의 인자에 값을 전달할 수도 있습니다.
	resolve(value);

	// 2. 에러가 발생하는 경우
	// reject의 인자에 에러메세지를 전달할 수도 있습니다.
	reject(error);
});
************************************************************************
const fs = require("fs");

const getDataFromFilePromise = filePath => {
  return new Promise((resolve, reject) => {
  // TODO: Promise 및 fs.readFile을 이용해 작성합니다.
  fs.readFile(filePath, 'utf-8', (err, data) => {
    if (err) {
      reject(err);
    } else {
      resolve(data);
    }
    });
  })
};

 

Promise chaining

 

const printString = (string) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve();
      console.log(string);
    }, Math.floor(Math.random() * 100) + 1);
  });
};

const printAll = () => {
  printString('A')
    .then(() => {
      return printString('B');
    })
    .then(() => {
      return printString('C');
    });
};

printAll();

***********************************************************************************
const path = require('path');
const { getDataFromFilePromise } = require('./02_promiseConstructor');

const user1Path = path.join(__dirname, 'files/user1.json');
//__dirnamefiles/user1.json
const user2Path = path.join(__dirname, 'files/user2.json');

// HINT: getDataFromFilePromise(user1Path) 및 getDataFromFilePromise(user2Path)를 이용해 작성합니다
const readAllUsersChaining = () => {
  // TODO: 여러개의 Promise를 then으로 연결하여 작성합니다
  return new Promise((resolve, reject) => {
    let result = [];
    getDataFromFilePromise(user1Path)
      .then((data) => {
        result.push(JSON.parse(data));
        return getDataFromFilePromise(user2Path);
      })
      .then((data) => {
        result.push(JSON.parse(data));
        resolve(result);
      });
  });
};

readAllUsersChaining();

 

Promise.all()

 

Promise.all([promiseOne(), promiseTwo(), promiseThree()])
  .then((value) => console.log(value))
  .catch((err) => console.log(err));
  

**************************************************************************
const path = require('path');
const { getDataFromFilePromise } = require('./02_promiseConstructor');

const user1Path = path.join(__dirname, 'files/user1.json');
const user2Path = path.join(__dirname, 'files/user2.json');

const readAllUsers = () => {
  // TODO: Promise.all을 이용해 작성합니다
  const user1 = getDataFromFilePromise(user1Path)
  const user2 = getDataFromFilePromise(user2Path)
  return Promise.all([user1, user2])
    .then((value) => {
      return value.map((el) => JSON.parse(el));
    })
}


readAllUsers()

 

Async/Await

 

const printAll = async () => {
  await printString('A');
  await printString('B');
  await printString('C');
};

printAll();

************************************************
const path = require('path');
const { getDataFromFilePromise } = require('./02_promiseConstructor');

const user1Path = path.join(__dirname, 'files/user1.json');
const user2Path = path.join(__dirname, 'files/user2.json');

const readAllUsersAsyncAwait = async () => {
  // TODO: async/await 키워드를 이용해 작성합니다
  const user1 = await getDataFromFilePromise(user1Path)
  const user2 = await getDataFromFilePromise(user2Path)
  
  return [JSON.parse(user1), JSON.parse(user2)]
}

readAllUsersAsyncAwait();

 

 

'Learn > 과제' 카테고리의 다른 글

React Custom Component 추가로 배운 개념  (0) 2023.02.22
피그마 클론 만들기 (chatGPT)  (0) 2023.02.17
유효성 테스트를 하며 배운 것들 정리  (0) 2023.01.06
계산기 복습  (0) 2022.12.26
계산기 2일 차  (0) 2022.12.26