npm init하고 버전을 0.0.1로 최소한의 버전을 사용 -> 버전을 더 많이 쓰기 위해서
npm i sequelize mysql2 sequelize-cli
mysql2: Node와 MySQL DB를 연결해주는 드라이버
npx sequelize init

Public: 프론트에서 가져다 쓸 이미또는 css 자바스크립트 html 정적리소스
passport: 로그인을 도와줄 라이브러리
views: 넌적스 화면
routes: 라우터드을 담당
.env: 설정 파일
npm i express cookie-parser express-session morgan multer dotenv nunjucks
npm i -D nodemon
메인 파일
const express = require('express');
const cookieParser = require('cookie-parser');
const morgan = require('morgan');
const path = require('path');
const session = require('express-session');
const nunjucks = require('nunjucks');
const dotenv = require('dotenv');
dotenv.config();
const pageRouter = require('./routes/page');
const app = express();
app.set('port', process.env.PORT || 8001);
app.set('view engine', 'html');
nunjucks.configure('views', {
express: app,
watch: true,
});
app.use(morgan('dev'));
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser(process.env.COOKIE_SECRET));
app.use(session({
resave: false,
saveUninitialized: false,
secret: process.env.COOKIE_SECRET,
cookie: {
httpOnly: true,
secure: false,
},
}));
app.use('/', pageRouter);
app.use((req, res, next) => {
const error = new Error(`${req.method} ${req.url} 라우터가 없습니다.`);
error.status = 404;
next(error);
});
app.use((err, req, res, next) => {
res.locals.message = err.message;
res.locals.error = process.env.NODE_ENV !== 'production' ? err : {};
res.status(err.status || 500);
res.render('error');
});
app.listen(app.get('port'), () => {
console.log(app.get('port'), '번 포트에서 대기중');
});
모델 기본 구성방식
const Sequelize = require('sequelize');
class User extends Sequelize.Model {
static initiate(sequelize) {
}
static associate(db) {
}
module.exports = User;
post.js: 게시글
hashta.js: 해시태그
user.js
app.use(passport.intialize());
반드시 express session 아래에 작성해야 함
패스포트에 필요한 미들웨어 하고 따로 패스포트 설정을 해야 한다.
middelswares/index.js
exports.isLoggedIn = (req, res, next) => {
if (req.isAuthenticated()) {
next();
} else {
res.status(403).send('로그인 필요');
}
};
패스포트 통해서 로그인 했으면 다음으로 넘어가고 패스포트 통해서 로그인 안 했으면 로그인해라
serializeUser는 사용자 정보 객체에서 아이디만 추려 세션에 저장하는 것
deserializeUser는 세션에 저장한 아이디를 통해 사용자 정보 객체를 불러오는 것