파일 시스템에 접근하는 모듈
const fs = require('fs');
fs.readFile('./readme.txt', (err, data) => {
if (err) {
throw err;
}
console.log(data);
console.log(data.toString());
});

위 단순히 data의 결과만 보면 buffer 01 f4 이런 식으로 나와 있는데 이는 컴퓨터가 읽기 위한 010101같은 데이터이다. 따라서 이걸 우리가 알 수 있게 문자열로 바꾸어 주는 줘야 하니 toString()으로 문자로 변환해준다.
위와 같은 callback 함수를 promise로 변환하려면 fs 자체에서 기능이 있다
const fs = require('fs').promise
처럼 뒤에 .promise를 붙여 주면 바로 prmoise로 쓸 수 있게 된다
const fs = require('fs').promises;
fs.readFile('ch05/readme.txt')
.then((data) => {
console.log(data);
console.log(data.toString());
})
.catch((err) => {
throw err;
})
const fs = require('fs').promises;
fs.writeFile('ch05/readme22.txt', '글이 입력됩니다')
.then(() => {
return fs.readFile('ch05/readme22.txt')
})
.then((data) => {
console.log(data.toString())
})
.catch((err) => {
throw err;
})

fs.readFile 들이 비동기 함수이기 때문에 아래와 같은 코드에서 순서대로 실행되지 않고, 동시에 실행된다
const fs = require('fs');
fs.readFile('ch05/readme.txt', (err, data) => {
if (err) {
throw err;
}
console.log('1번', data.toString());
});
fs.readFile('ch05/readme.txt', (err, data) => {
if (err) {
throw err;
}
console.log('2번', data.toString());
});
fs.readFile('ch05/readme.txt', (err, data) => {
if (err) {
throw err;
}
console.log('3번', data.toString());
});
fs.readFile('ch05/readme.txt', (err, data) => {
if (err) {
throw err;
}
console.log('4번', data.toString());
});

순서에 맞게 호출하려면?
const fs = require('fs');
let data = fs.readFileSync('./ch05/readme.txt')
console.log('1번', data.toString())
data = fs.readFileSync('./ch05/readme.txt')
console.log('2번', data.toString())
data = fs.readFileSync('./ch05/readme.txt')
console.log('3번', data.toString())
data = fs.readFileSync('./ch05/readme.txt')
console.log('4번', data.toString())
data = fs.readFileSync('./ch05/readme.txt')
const fs = require('fs');
fs.readFile('ch05/readme.txt', (err, data) => {
if (err) {
throw err;
}
console.log('1번', data.toString());
fs.readFile('ch05/readme.txt', (err, data) => {
if (err) {
throw err;
}
console.log('2번', data.toString());
fs.readFile('ch05/readme.txt', (err, data) => {
if (err) {
throw err;
}
console.log('3번', data.toString());
fs.readFile('ch05/readme.txt', (err, data) => {
if (err) {
throw err;
}
console.log('4번', data.toString());
});
});
});
});
하지만 위와 같이 진행할 경우 callBack 지옥이 발생. 따라서 promise로 깔끔하게 바꾸어 줌
const fs = require('fs').promises;
fs.readFile('ch05/readme.txt')
.then((data) => {
console.log('1번', data.toString());
return fs.readFile('ch05/readme.txt')
})
.then((data) => {
console.log('2번', data.toString());
return fs.readFile('ch05/readme.txt')
})
.then((data) => {
console.log('3번', data.toString());
return fs.readFile('ch05/readme.txt')
})
.then((data) => {
console.log('4번', data.toString());
return fs.readFile('ch05/readme.txt')
})
.catch((err) => {
throw err
})
더 줄이기 위해 async / await 로 변환
const fs = require('fs').promises;
async function main() {
let data = await fs.readFile('ch05/readme.txt')
console.log('1번', data)
data = await fs.readFile('ch05/readme.txt')
console.log('2번', data)
data = await fs.readFile('ch05/readme.txt')
console.log('3번', data)
data = await fs.readFile('ch05/readme.txt')
console.log('4번', data)
}
main()