on
Node.js학습_SNS서비스 만들기(익스프레스 이용)
Node.js학습_SNS서비스 만들기(익스프레스 이용)
728x90
반응형
# SNS 서비스 만들기
1. 노드버드 프로젝트 구조 갖추기.
### NodeBird SNS 서비스
기능 : 로그인, 이미지 업로드, 게시글 작성, 해시태그 검색, 팔로잉
express-generator 대신 직접 구조를 갖춤
프런트엔드 코드보다 노드 라우터 중심으로 볼 것.
관계형 데이터 베이스 MySQL 선택.
### 프로젝트 시작
프로젝트 폴더 생성.
package.json 파일 생성 : 프로젝트의 기본.
npm init
시퀄라이즈 폴더 구조 생성
npm i sequelize mysql2 sequelize-cli npx sequelize init
### 폴더 구조 설정
views (템플릿 엔진), routes (라우터), public (정적 파일 : css 등), passport (패스포트) 폴더 생성
app.js와 .env 파일도 생성하기.
### 패키지 설치와 nodemon
npm 패키지 설치 후 nodemon도 설치
nodemon은 서버 코드가 변경되었을때 자동으로 서버를 재시작해줌.
npm i -D nodemon pm i express express-session nunjucks morgan cookie-parser dotenv multer
### app.js
노드 서버의 핵심.
소스 코드 참고 : https://github.com/zerocho/nodejs-book
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'), '번 포트에서 대기중'); });
.env도 같이 추가.
COOKIE_SECRET=cookiesecret
### 라우터 생성
routes/page.js : 템플릿 엔진을 렌더링하는 라우터
views/layout.html : 프론트 엔드 화면 레이아웃 (로그인/유저 정보 화면)
views/main.html : 메인 화면 (게시글들이 보임)
views/profile.html : 프로필 화면 (팔로잉 관계가 보임)
views/error.html : 에러 발생 시 에러가 표시될 화면
public/main.css : 화면 css
소스 참고 : https://github.com/ZeroCho/nodejs-book/tree/master/ch9/9.1/nodebird
각 파일 생성 완료 후 npm start로 실행.
2. 데이터베이스 구조 갖추기
### 모델 생성
models/user.js : 사용자 테이블과 연결됨.
provider : 카카오 로그인인 경우 kakao, 로컬 로그인(이메일/비밀번호)인 경우 local snsId : 카카오 로그인인 경우 주어지는 id
models/post.js : 게시글 내용과 이미지 경로를 저장 (이미지는 파일로 저장)
models/hashtag.js : 해시태그 이름을 저장 (나중에 태그로 검색하기 위함)
3.
728x90
반응형
from http://dlagusgh1.tistory.com/843 by ccl(A) rewrite - 2021-10-17 23:26:57