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 |