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