Node.js 내장모듈 살펴보기
Node.js에서 파일 시스템 모듈 불러오기
fs모듈은 빌트인 모듈(built-in module)이므로, js파일에 require만 시켜주면 된다.
빌트인 모듈(built-in module)이란?
해당 프로그래밍 언어에서(이 경우는 Node.js에서) 공식적으로 제공하여 별도의 다운로드없이 사용가능한 모듈이다.
const fs = require('fs'); // 파일 시스템 모듈을 불러옵니다
3rd-party 모듈 사용하기
3rd-party모듈이란?
해당 프로그래밍 언어에서(이 경우는 node.js에서) 공식적으로 제공하는 빌트인 모듈(built-in module)이 아닌
모든 외부 모듈을 말한다.
npm install underscore
그리고 js파일에 다음과 같이 require 시켜준다.
const _ = require('underscore');
fs모듈로 파일 내용 읽기
fs.readFile(path[, options], callback)
- 콜백의 첫번째 인자는 error,두번째 인자는 data이다.
- 에러가 발생하지 않으면 err 는 null 이 되며, data 에 문자열이나 Buffer 라는 객체가 전달된다.
- data 는 파일의 내용이며 기본적으로 Buffer 라는 객체가 전달된다.
option을 문자로 넣는 경우 (인코딩 인자로 받음)
fs.readFile('test.txt', 'utf8', (err, data) => {
if (err) {
throw err; // 에러를 던집니다.
}
console.log(data);
});
option을 객체로 넣는 경우
let options = {
encoding: 'utf8', // utf8 인코딩 방식으로 엽니다
flag: 'r' // 읽기 위해 엽니다
}
// /etc/passwd 파일을 options를 사용하여 읽습니다.
fs.readFile('/etc/passwd', options, (err, data) => {
if (err) {
throw err; // 에러를 던집니다.
}
console.log(data);
})
🛑인코딩 옵션을 추가하지 않으면 Buffer data가 전달된다. 우리가 원하는 데이터의 형식을 얻으려면 반드시 utf-8을 적어줘야한다.
buffer란 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리의 영역을 말한다.
[, options]가 써도되고 안써줘도 된다고는 하지만, 대부분의 경우 'utf-8'을 적는다.
callback 활용하기
const fs = require("fs");
const getDataFromFile = function (filePath, callback) {
return fs.readFile(filePath,'utf-8',(err,data)=>{
if(err) {callback(err,null)}
else{callback(null,data)}
})
};
getDataFromFile('README.md', (err, data) => console.log(data));
promise then 활용하기
const fs = require("fs");
const getDataFromFilePromise = filePath => {
return new Promise((resolve,reject)=>{
fs.readFile(filePath,'utf-8',(err,data)=>{
if(err){
reject(err)
}
resolve(data)
})
}
)
};
getDataFromFilePromise('README.md').then(data => console.log(data));
promise all 활용하기
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 = () => {
return Promise.all([getDataFromFilePromise(user1Path), getDataFromFilePromise(user2Path)])
.then((datas)=>{
return [JSON.parse(datas[0]),JSON.parse(datas[1])]
})
}
readAllUsers()
async await 활용하기
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 () => {
const user1 = JSON.parse(await getDataFromFilePromise(user1Path))
const user2 = JSON.parse(await getDataFromFilePromise(user2Path))
return [user1,user2]
}
readAllUsersAsyncAwait();
💡 관련 링크
'개념 > javaScript' 카테고리의 다른 글
[javaScript] 재귀 함수와 메모리 사용량 간의 관계 (0) | 2022.08.22 |
---|---|
[javaScript] fs모듈로 파일 내용 수정하기 (0) | 2022.08.15 |
[javaScript] async/await (0) | 2022.08.01 |
[javaScript] Promise란? + 관련 메서드들 (0) | 2022.07.29 |
[javaScript] 비동기, Promise,async/await (0) | 2022.07.26 |