Node.js 내장 모듈 사용법
Node.js의 경우 많은 API가 비동기로 작성되어 있다. Node.js는 "비동기 이벤트 기반 자바스크립트 런타임" 이다.
파일을 읽을 때는 readFile 이라는 메소드를 사용한다. 파일을 저장할 때에는 writeFiled을 쓴다. 모듈을 사용하기 위해서는 불러오는 과정이 필요한데, 자바스크립트 코드 가장 상단에 require 구문을 이용하여 다른 파일을 불러온다.
const fs = require('fs'); // 파일 시스템 모듈을 불러온다.
const dns = require('dns'); // DNS 모듈을 불러온다.
3rd-party 모듈을 사용하는 방법은 먼저 npm으로 설치를 해준 뒤, 마찬가지로 상단에 require을 작성하면 된다.
npm install underscore // underscore 서드파티 모듈
const _ = require('underscore');
fs 모듈 실습
callBack.js
const fs = require("fs");
const getDataFromFile = function (filePath, callback) {
fs.readFile(filePath, "utf-8", (err, data) => {
if ( err ) {
callback(err, null);
}
else {
callback(null, data);
}
});
};
getDataFromFile('README.md', (err, data) => console.log(data));
module.exports = {
getDataFromFile
};
promiseConstructor.js
const fs = require("fs");
// Promise 및 fs.readFile을 이용해 작성
const getDataFromFilePromise = filePath => {
return new Promise( (resolve, reject) => {
fs.readFile(filePath, "utf-8", (err, data) => {
if ( err ) {
reject(err);
}
else {
resolve(data);
}
})
})
};
getDataFromFilePromise('README.md').then(data => console.log(data));
module.exports = {
getDataFromFilePromise
};
basicChaining.js
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 readAllUsersChaining = () => {
// T여러개의 Promise를 then으로 연결하여 작성
let result = [];
return getDataFromFilePromise(user1Path)
.then( (value) => {
let obj1 = JSON.parse(value)
result.push(obj1)
return getDataFromFilePromise(user2Path)
})
.then ( (value) => {
let obj2 = JSON.parse(value)
result.push(obj2)
return result;
})
}
readAllUsersChaining();
module.exports = {
readAllUsersChaining
}
promiseAll.js
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 = () => {
// Promise.all을 이용해 작성
let user1 = getDataFromFilePromise(user1Path);
let user2 = getDataFromFilePromise(user2Path);
return Promise.all ( [user1, user2])
.then( (value) => {
return value.map ( (data) => JSON.parse(data) )
})
}
readAllUsers()
module.expODO: orts = {
readAllUsers
}
asyncAwait.js
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() => {
// async, await를 이용해 작성
let user1 = await getDataFromFilePromise(user1Path);
let user2 = await getDataFromFilePromise(user2Path);
return [JSON.parse(user1), JSON.parse(user2)]
}
readAllUsersAsyncAwait();
module.exports = {
readAllUsersAsyncAwait
}