Node.js 섹션 8 노드버드 SNS 만들기

_upper·2023년 11월 14일

프로젝트 구조 갖추기

npm init하고 버전을 0.0.1로 최소한의 버전을 사용 -> 버전을 더 많이 쓰기 위해서

SQlize 관련된 것 3개의 라이브러이 다운

npm i sequelize mysql2 sequelize-cli

mysql2: Node와 MySQL DB를 연결해주는 드라이버

SQLize 초반 세팅

npx sequelize init

nodebird 폴더 구조


Public: 프론트에서 가져다 쓸 이미또는 css 자바스크립트 html 정적리소스
passport: 로그인을 도와줄 라이브러리
views: 넌적스 화면
routes: 라우터드을 담당
.env: 설정 파일

익스프레스 관련 라이브러리 설치

npm i express cookie-parser express-session morgan multer dotenv nunjucks

개발용 서버

npm i -D nodemon

app.js

메인 파일

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

passport 세팅 및 회원가입 만들기

app.use(passport.intialize());

반드시 express session 아래에 작성해야 함

패스포트에 필요한 미들웨어 하고 따로 패스포트 설정을 해야 한다.

middelswares/index.js

exports.isLoggedIn = (req, res, next) => {
    if (req.isAuthenticated()) {
      next();
    } else {
      res.status(403).send('로그인 필요');
    }
  };
  

패스포트 통해서 로그인 했으면 다음으로 넘어가고 패스포트 통해서 로그인 안 했으면 로그인해라

passport로 이메일 로그인 만들기

serializeUser는 사용자 정보 객체에서 아이디만 추려 세션에 저장하는 것
deserializeUser는 세션에 저장한 아이디를 통해 사용자 정보 객체를 불러오는 것

  1. /auth/login 라우터를 통해 로그인 요청이 들어옴
  2. 라우터에서 passport.authenticate 메서드 호출
  3. 로그인 전략(LocalStrategy) 수행
  4. 로그인 성공 시 사용자 정보 객체와 함께 req.login 호출
  5. req.login 메서드가 passport.serializeUser 호출
  6. req.session에 사용자 아이디만 저장해서 세션 생성
  7. express session에 설정한 대로 브라우저에 connect.sid 세션 쿠키 전송
  8. 로그인 완료

0개의 댓글