Node.js 파일 스토리지 코드 리팩토링

이건선·2023년 1월 22일
0

Node.js

목록 보기
7/32

👉 Shop.js


const path = require('path');

const express = require('express');

const productsController = require('../controllers/products')

const router = express.Router();

router.get('/', productsController.getProducts);

module.exports = router;


👉 C products.js


const Product = require('../models/product');

exports.getAddProduct = (req, res, next) => {
  res.render('add-product', {
    pageTitle: 'Add Product',
    path: '/admin/add-product',
  });
};

exports.postAddProduct = (req, res, next) => {
  const product = new Product(req.body.title);
  console.log("input log 1",product);
  product.save();
  console.log("input log 2",product);
  res.redirect('/');
};

exports.getProducts = (req, res, next) => {
  Product.fetchAll((products) => {
    console.log("4. getProducts (Shop page view)+", products);
    res.render('shop', {
      prods: products,
      pageTitle: 'Shop',
      path: '/',
      hasProducts: products.length > 0,
    });
  });
  
};

👉 M product.js


const fs = require('fs');
const path = require('path');
const p = path.join(
    path.dirname(process.mainModule.filename),
    'data',
    'products.json'
);

const getProductsFromFile = (cb) => {
    console.log("why?", cb.toString());
    fs.readFile(p, (err, fileContent) => {
        if (err) {
            cb([]);
        } else { cb(JSON.parse(fileContent)); }

    });
};


module.exports = class Product {
    constructor(t) {
        this.title = t;
      console.log(t);
    }

    save() {
        getProductsFromFile(products => {  
            console.log("1. getProductsFromFile +", products);
            products.push(this);
            console.log("2. this +", this);
            fs.writeFile(p, JSON.stringify(products), (err) => {
                console.log("3. products +", products);
            });     
        });
    }

    static fetchAll(cb) {
        getProductsFromFile(cb)
    }
}




🧐 console.log

알아보기

input log 1 Product { title: '알아보기' }

why? products => {
            console.log("1. getProductsFromFile +", products);
            products.push(this);
            console.log("2. this +", this);
            fs.writeFile(p, JSON.stringify(products), (err) => {
                // console.log(err);
                // console.log(products);
                console.log("3. products +", products);
            });
        }
        
input log 2 Product { title: '알아보기' }

1. getProductsFromFile + []

2. this + Product { title: '알아보기' }

[nodemon] restarting due to changes...

3. products + [ Product { title: '알아보기' } ]

why? (products) => {
    console.log("4. getProducts (Shop페이지를 표기해라)+", products);
    res.render('shop', {
      prods: products,
      pageTitle: 'Shop',
      path: '/',
      hasProducts: products.length > 0,
      activeShop: true,
      productCSS: true
    });
  }
  
4. getProducts (Shop페이지를 표기해라)+ [ { title: '알아보기' } ]
  1. <\input name="title"\>에 알아보기 입력
  2. module.exports = class Product { constructor(t) { this.title = t; }의 콘솔 로그 \알아보기\
profile
멋지게 기록하자

0개의 댓글