[Node.js] fs.readFile() -> fs.promises, async/await로 리팩토링하기

mj·2024년 11월 21일
0

kbt

목록 보기
7/18
post-thumbnail

리팩토링 전

  • 구조: postController.js에서 postModel.js의 getAllPosts()를 사용함.

postController.js

import { getAllposts } from "../models/postModel.js";
  
// GET 게시물 목록
export const getPostsController =async(req, res) => {
    try{
        const postsData = await getAllPosts();
        res.json({
            message: "게시물 목록 조회 성공",
            data: postsData
        });
    } catch(error){
        console.log(error); //getAllPosts의 reject()인자 리턴됨
        res.status(500).json({message: "게시물 목록 조회 실패"});
    }
};

postModel.js

import fs from 'fs';

export const getAllPosts = () => {
    return new Promise((resolve, reject) => {
        fs.readFile(postsFilePath, 'utf-8', (error, data) => {
            if(error) return reject(error);
            resolve(JSON.parse(data));
        });
    });
};

리팩토링 후

postModel.js

import fs from 'fs/promises';

export const getAllPosts = async() => {
    try{
        const data = await fs.readFile(postsFilePath, 'utf-8');
        return JSON.parse(data);

    }catch(error){
        throw error;
    }
};

결론

리팩토링 전에는 직접 Promise객체로 감싸주어야 했지만, fs.promises를 사용하면 await fs.readFile()만으로도 자동으로 프로미스 객체를 반환한다.

profile
일단 할 수 있는걸 하자.

0개의 댓글