[node.js] File-System(promise, async/await)
π file-system
: nodeμ λͺ¨λμ΄λΌ commonJS λ°©μμΌλ‘ λΆλ¬ μ¬ μ μμ
const fs = require('fs');
β readFile
: νμΌμ μ½μ λ μ¬μ©νλ λ©μλ
νμΌμ μ½λ κ²λ μκ°μ΄ νμν μμ μ΄λ―λ‘ -> callback μ¬μ©
fs.readFile('νμΌμμΉ','μ λμ½λν¬λ§·',callback(err, data) {})
err : νμΌ μ½κΈ°κ° μ μλμμ λ, error μ½λ λ°ν
data: νμΌ μ½κΈ°κ° μ λμμ λ, μ½μ data λ°ν
const fs = require('fs');
fs.readFile('readme.txt', 'utf-8', (err, data) => {
if (err) {
console.log(err);
} else {
console.log(data);
}
});
β writeFile
: νμΌμ μ½μ λ μ¬μ©νλ λ©μλ
fs.writeFile('νμΌμμΉ, data, 'μ λμ½λν¬λ§·, callback(err) {})
writeFileμ dataλ μκ³ , μ°κΈ°κ° μ μλμμ λ err λ°ν
const fs = require('fs');
const str = 'νμΌ μ°κΈ°κ° μ μμ μΌλ‘ λλμ§ ν
μ€νΈ ν©λλ€.';
fs.writeFile('readme.txt', str, 'utf-8', (err) => {
if (err) {
console.log(err);
} else {
console.log('writefile succeed');
}
});
π file-system with Promise
- callback λ°©μμ μ¬μ© λ° μ½λ κ°λ μ±μ΄ λ¨μ΄μ§κΈ° λλ¬Έμ FSλ μ μ΄μ promiseλ°©μμ κΈ°λ₯μ μ 곡
- κΈ°μ‘΄ λ©μλλͺ λ€μ syncλ₯Ό λΆμ΄λ©΄ promise λ°©μμ μ¬μ©νμ¬ λκΈ°μ μΌλ‘ μλ
- λ¨, syncκ° λΆμ λ©μλλ λ μ΄μ callback ν¨μκ° νμ μμΌλ―λ‘ μμ¨μ€λλ¨
π 1,2,3,4λ²μ μμλλ‘ μΆλ ₯νκΈ° μν κΈ°μ‘΄ callback λ°©μ μ½λ
const fs = require('fs');
fs.readFile('./readme.txt', (err, data) => {
if (err) {
throw err;
}
console.log('1λ²', data.toString());
fs.readFile('./readme.txt', (err, data) => {
if (err) {
throw err;
}
console.log('2λ²', data.toString());
fs.readFile('./readme.txt', (err, data) => {
if (err) {
throw err;
}
console.log('3λ²', data.toString());
fs.readFile('./readme.txt', (err, data) => {
if (err) {
throw err;
}
console.log('4λ²', data.toString());
});
});
});
});
πpromise λ°©μμΌλ‘ ꡬν
const fs = require('fs');
let data = fs.readFileSync('./readme.txt');
console.log('1λ²', data.toString());
data = fs.readFileSync('./readme.txt');
console.log('2λ²', data.toString());
data = fs.readFileSync('./readme.txt');
console.log('3λ²', data.toString());
data = fs.readFileSync('./readme.txt');
console.log('4λ²', data.toString());
π« νμ§λ§, syncκ° λΆμ μ½λλ μλ² μμμ μλ ν λ μ μμ μΌλ‘ μλνμ§ μλ κ²½μ° λΉλ²
-> fs μΈ λλ fs.promiseλ₯Ό νΈμΆνμ¬ μ¬μ©ν΄μΌν¨
fs.promise μ€μ€λ‘ μ±κ³΅ μ¬λΆλ₯Ό νλ¨νμ¬ resolve, rejectλ₯Ό λ°ν
π promise
promiseλ μΌμ’ μ class μ΄λ―λ‘ new μ¬μ©
const promise = new Promise(function(resolve, reject) {});
- resolve, rejectλΌλ 2κ°μ λ§€κ°λ³μλ₯Ό μ½λ°±ν¨μλ‘ λ°μμ μ¬μ©
- promiseκ° ν λΉλλ©΄ μ΄ promiseλ resolve λλ reject ν¨μκ° callbackμ΄ λ λ κΉμ§ 무ν λκΈ°
- resolve: promiseκ° μ μμ μΌλ‘ μ΄ν λμμ κ²½μ° μ¬μ© / thenμΌλ‘ λ°μ
- reject: promiseκ° μ μμ μΌλ‘ μ΄νλμ§ μμμ κ²½μ° μ¬μ© / catchλ‘ λ°μ
- resolve, reject λ λ°μ΄ν°λ₯Ό λ§€κ°λ³μλ‘ λ³΄λΌ μ μμ
resolve, rejectκ° μ¬μ©λμ§ μμΌλ©΄ promiseλ ν΄λΉ μ½λ°±μ΄ λμ¬ λ κΉμ§ pending μνκ° λμ΄ κΈ°λ€λ¦Ό
π μμ κΈ°λ³Έ μ½λλ₯Ό fs.promiseλ‘ λ³ν
const fs = require('fs').promises;
fs.readFile('./readme.txt')
.then((data) => {
console.log('1λ²', data.toString());
return fs.readFile('./readme.txt');
})
.then((data) => {
console.log('2λ²', data.toString());
return fs.readFile('./readme.txt');
})
.then((data) => {
console.log('3λ²', data.toString());
return fs.readFile('./readme.txt');
})
.then((data) => {
console.log('4λ²', data.toString());
})
.catch((err) => {
throw err;
});
π async/await
function μμ asyncλ₯Ό λΆμ΄λ©΄ ν΄λΉ ν¨μλ νμ Promise λ°ν
asyncκ° λΆμ ν¨μμμ returnμ μ°λ©΄ μλμ λμΌν μν μ ν¨
async function f1() {
return 1;
}
function f2() {
return Promise.resolve(1);
}
asyncκ° λΆμ ν¨μ λ΄λΆμλ await μ¬μ© κ°λ₯
awaitλ promiseκ° κ²°κ³Ό(resolve, reject)λ₯Ό κ°μ Έλ€ μ€ λ κΉμ§ κΈ°λ€λ¦Ό
(λ¨, asyncλ ν¨μμ λΆμ¬μΌ νλ―λ‘ λ³λμ ν¨μ λ΄λΆμ κΈ°λ₯μ μ μνκ³ ν΄λΉ ν¨μλ₯Ό μΈλΆμμ νλ² μ¬μ©ν΄ μ€μΌν¨)
πμ½λ μμ
const fs = require('fs').promises;
async function main() {
let data = await fs.readFile('./readme.txt');
console.log('1λ²', data.toString());
data = await fs.readFile('./readme.txt');
console.log('2λ²', data.toString());
data = await fs.readFile('./readme.txt');
console.log('3λ²', data.toString());
data = await fs.readFile('./readme.txt');
console.log('4λ²', data.toString());
}
main();
π routing
: λ€νΈμν¬ μμμ λ°μ΄ν°λ₯Ό λ³΄λΌ λ μ΅μ μ κ²½λ‘λ₯Ό μ ννλ κ³Όμ
β file-systemμΌλ‘ DBꡬν
database.json νμΌ μμ± ν μ½λ μμ±
getPosts() : database.jsonμμ λ°μ΄ν°λ₯Ό μ½μ΄μ λ³μλ‘ λ³νν΄μ£Όλ ν¨μ
savePosts(): λ³κ²½ μ¬νμ database.jsonμ μ μ₯νλ ν¨μ
const fs = require('fs');
async function getPosts() {
const jsonPosts = await fs.promises.readFile('database.json', 'utf-8');
return JSON.parse(jsonPosts).posts;
}
async function savePosts(posts) {
const content = {
posts,
};
return fs.promises.writeFile('database.json’, JSON.stringify(content), 'utf-8');
}