npm init
npm i sequelize mysql2 sequelize-cli
npx sequelize init
템플릿을 넣을 views
라우터를 넣을 routes
정적파일을 넣은 public
위 코드와 파일들을 생성하며 폴더 구조를 형성한다
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에서 따로 미들웨어를 다른 곳에서 불러와 사용한다.
일단은 코드를 관리하기 편하기 위해서라고 알고 있자
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 를 쳐서 데이터베이스를 생성해보자