NodeBird SNS 서비스 만들어보자..
기능: 로그인, 이미지 업로드, 게시글 작성, 해시태그 검색, 팔로잉
- express-generator 대신 직접 구조를 갖춤
- 프런트엔드 코드보다 노드 라우터 중심으로 볼 것
- 관계형 데이터베이스 MySQL 선택
1. 폴더 생성 (프로젝트 넣을 폴더)
2. npm init 작성
3. 필요한 패키기 설치
4. npx sequelize init <- config migration models 등 폴더가 생김
5. npm i dotenv, multer
6. 폴더 public, routers, views 생성
7. 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); // port 나눔
// 전부 전에 설명했던 것
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,
},
}));
// page router 연결
app.use('/', pageRouter);
// error 404 처리
app.use((req, res, next) => {
const error = new Error(`${req.method} ${req.url} 라우터가 없습니다.`);
error.status = 404;
next(error); // error 미들웨어로 넘김
});
app.use((err, req, res, next) => {
res.locals.message = err.message; // 템플릿 엔진 변수
// error의 스택, 배포모드 일 때는 안보여줌
res.locals.error = process.env.NODE_ENV !== 'production' ? err : {};
res.status(err.status || 500); // 아님 일반 에러 500
res.render('error');
});
// port에서 대기
app.listen(app.get('port'), () => {
console.log(app.get('port'), '번 포트에서 대기중');
});
8. 프로젝트 작성
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); // port 나눔
// 전부 전에 설명했던 것
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,
},
}));
// page router 연결
app.use('/', pageRouter);
// error 404 처리
app.use((req, res, next) => {
const error = new Error(`${req.method} ${req.url} 라우터가 없습니다.`);
error.status = 404;
next(error); // error 미들웨어로 넘김
});
app.use((err, req, res, next) => {
res.locals.message = err.message; // 템플릿 엔진 변수
// error의 스택, 배포모드 일 때는 안보여줌
res.locals.error = process.env.NODE_ENV !== 'production' ? err : {};
res.status(err.status || 500); // 아님 일반 에러 500
res.render('error');
});
// port에서 대기
app.listen(app.get('port'), () => {
console.log(app.get('port'), '번 포트에서 대기중');
});
9. config.json 을 이용하여 데이터 데이스에 연결
10. models에 데이터 모델 생성
11. 프로젝트 쭉 작성 (프론트 - 백)
12. npm start로 서버 가동
'Node.js' 카테고리의 다른 글
패스포트 사용하기 (로그인 과정 helper) (0) | 2021.01.05 |
---|---|
Nodejs 데이터 베이스 셋팅하기 (0) | 2021.01.05 |
시퀄라이즈 쿼리 (0) | 2020.12.30 |
시퀄라이저 모델 자료형 (0) | 2020.12.29 |
시퀄라이즈 ORM와 Nodejs에 mysql 연결 (0) | 2020.12.28 |