-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
143 lines (114 loc) · 3.68 KB
/
app.js
File metadata and controls
143 lines (114 loc) · 3.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
const express = require('express');
const bodyParser =require('body-parser');
const cookieParser = require('cookie-parser');
const path = require('path');
const session = require('express-session');
const qs = require('qs');
const mongoose = require('mongoose');
const morgan = require('morgan');
const multer = require('multer');
const dotenv = require('dotenv');
const connect = require('/schemas');
const indexRouter = require('./routes/index');
const speakRouter = require('./routes/speak');
const feedbackRouter = require('./routes/feedback');
const homeRouter = require('./routes/home');
const subjectRouter = require('./routes/subject');
const hpp = require('hpp');
const helmet = require('helmet');
const csurf = requrie('csurf');
const logger = require('./logger');
const redis = require('redis');
const RedisStore = require('connect-redis')(session);
dotenv.config();
//레디스 설정
const redisClient = redis.createClient({
url : 'redis ://${process.env.REDIS_HOST}:${process.env.REDIS_PORT}',
password : process.env.REDIS_PASSWORD,
})
// Router
app.use('/', indexRouter);
app.use('/speak', speakRouter);
app.use('/feedback', feedbackRouter);
app.use('/home', homeRouter);
app.use('/subject', subjectRouter);
const app = express();
//앱 서버 포트에 연결하기
app.set('port', process.env.PORT || 3000);
app.set('viw engine', 'html');
if( process.env.NODE_ENV === 'production') {
sessionOption.proxy = true;
app.enable('trust proxy');
app.use(morgan('dombined'));
app.use(helmet({contentSecurityPolicy : false}));
app.use(hpp());
} else {
app.use(morgan('div'));
}
app.use(session(sessionOption));
//미들웨어 설정
app.use(express.static(path.join(__dirname, 'public')));
app.use('/upload', express.static(path.join(__dirname, 'uploads')));
app.use(express.json());
app.use(express.urlencoded({extended : true}));
app.use(cookieParser(process.env.COOKIE_SECRET));
const sessionOption = {
resave : false,
saveUninitialized : false,
secret : process.env.COOKIE_SECRET,
cookie : {
httpOnly : true,
secure : false,
},
store : new RedisStore({client : redisClient}),
}
//body-parser 미들웨어 설정
app.use(bodyParser.urlencoded({extended : false}));
app.use(bodyParser.json());
//404 에러 처리 미들웨어
app.use((req,res,next) =>{
const error = new Error('${req.method} ${req.url} 라우터가 없음🧐');
error.status = 404;
logger.info('왜않돼?');
logger.error(error.message);
next(error);
})
//500 에러 미들웨어 정의
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.get('/', (req, res) =>{
res.sendFile(path.join(__dirname, 'client'))
})
//포트 연결
app.listen(app.get('port' ,()=>{
console.log('${port} 포트입니다.')
}))
//몽구스 연결
const connect =()=>{
if (process.env.NODE_ENV !== 'production'){ //개발 모드일때는 debug모드를 사용한다.
mongoose.set('debug', true);
}
mongoose.connect('mongodb://url', {
dbName : 'nodejs',
useNewUrlParser : true,
useCreateIndex : true,
} , (error) =>{
if (error) {
console.log('몽고디비 연결 에러', error);
} else {
console.log('몽고디비 연결 성공');
}
});
};
mongoose.connection.on('error' ,(error)=>{
console.error('몽고디비 연결 에러', error);
})
mongoose.connection.on('disconnected' ,()=>{
conosle.error('몽고디비 연결이 끊겼슘니당. 연결 재시도 하겠습니다.');
connect();
})
module.exports = connect;