cafe-jun12 2021. 4. 11. 14:56
반응형

Node  파일시스템 내장 모듈인 fs 는 파일을 읽고 쓸수 있는 라이브러리 입니다.  

'use strict';

const fs = require('fs');

fs.readFile('test.txt', 'utf-8', (err, data) => {
    if (err) return console.error(err);
    console.log(data);
});

const content = 'something to do list';

fs.writeFile('test1.txt', content, (err) => {
    if (err) return console.error(err);
});

 

해당 코드는 text.txt 파일을 있으면 읽어서 console.log() 로 출력을 해주고 text1.txt 파일을 something to do list 라는 데이터를 입력후 파일을 생성하는 코드입니다. 

 

하지만 실무에서는 다양한 요구사항을 반영하기 위해 코드를 가독성있게 작성해야합니다. 

해당코드의 개선할점은 아래와 같습니다.  

 

  • 파일을 쓰고 쓴파일을 읽어내는 코드를 하나의 함수안에서 해결할 필요가 보입니다. 
  • event loop 구조를 이해 했다면 async await 시 queue 에 대이터가 어떤 순서로 실행이 되는지 확인해보고 테스트 해본다 
  • async await 를 사용하기 위해 return 받는 내용을 promise 구조로 설정하고 에러를 잡기 위해 try catch 문을 사용한다  

위와 같은 개선점을 반영한 코드가 아래 코드 입니다. 

 

'use strict';

const fs = require('fs');
const { promisify } = require('util');

const read = promisify(fs.readFile);
const write = promisify(fs.writeFile);

const writeAndread = async (data = ' ') => {
    try {
        await write('text12.txt', data);
        return await read('text12.txt', 'utf-8', (err, data) => {
            if (err) return err;
            console.log(data);
        });
    } catch (e) {
        console.error(e);
    }
};
writeAndread('여기는 테스트 입니다.');

fs 모듈에 작성한 파일을 읽어오는것을 순서대로 실행하기 위해 util 모듈에서 비구조화 객체 promisify 적용하여  async await 사용할수 있게 하였습니다. 

 

 

반응형