프로젝트 구조 갖추기


npm init
npm i sequelize mysql2 sequelize-cli
npx sequelize init
템플릿을 넣을 views
라우터를 넣을 routes
정적파일을 넣은 public 

위 코드와 파일들을 생성하며 폴더 구조를 형성한다

image.png

routes/page.js

const express = require('express');
const { renderProfile, renderJoin, renderMain } = require('../controllers/page');

const router = express.Router();

router.use((req, res, next) => {
    res.locals.user = null;
    res.locals.followerCount = 0;
    res.locals.followingCount = 0;
    res.locals.followingIdList = [];
    next();
});

router.get('/profile', renderProfile);

router.get('/join', renderJoin);

router.get('/', renderMain);

module.exports = router;

get /profile, get /join, get / 으로 페이지 세 개로 구성했고
router.use로 템플릿 엔진에서 사용할 user, followingCount, followerCount, followingidList 변수를 res.locals로 설정했다. 
res.locals로 설정하는 이유는 user와 followingcount, followercount, followingidlist 변수는 모든 템플릿 엔진에서 공통으로 사용되기 때문이다.
controllers/page.js

exports.renderProfile = (req, res) => {
    res.render('profile', { title: '내 정보 - NodeBird' });
};

exports.renderJoin = (req, res) => {
    res.render('join', { title: '회원가입 - NodeBird' });
};

exports.renderMain = (req, res, next) => {
    const twits = [];
    res.render('main', {
        title: 'NodeBird',
        twits,
    });
};

이전과 다르게 controllers에서 따로 미들웨어를 다른 곳에서 불러와 사용한다.
일단은 코드를 관리하기 편하기 위해서라고 알고 있자

image.png

데이터베이스 세팅하기


user.js
static associate(db) {
        db.User.hasMany(db.Post);
        db.User.belongsToMany(db.User, {
            foreignKey: 'followingId',
            as: 'Followers',
            through: 'Follow',
        });
        db.User.belongsToMany(db.User, {
            foreignKey: 'followerId',
            as: 'Followings',
            through: 'Follow',
        });
    }
    
post.js
static associate(db) {
        db.Post.belongsTo(db.User);
        db.Post.belongsToMany(db.Hashtag, {through: 'PostHashtag'});
    }

hashtag.js
static associate(db) {
        db.Hashtag.belongsToMany(db.Post, { through: 'PostHashtag' });
    }
};
"development": {
    "username": "root",
    "password": "비번",
    "database": "nodebird",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
으로 config.json을 수정하고 원래는 데이터 베이스를 따로 만들어야하지만
시퀄라이즈는 config.json을 읽어 데이터베이스를 생성해주는 기능이 있다.
npx sequelize db:create 를 쳐서 데이터베이스를 생성해보자

image.png