forked from Doyoung-Park/node_sns
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathapp.js
More file actions
180 lines (135 loc) · 4.77 KB
/
app.js
File metadata and controls
180 lines (135 loc) · 4.77 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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
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');
const passport = require('passport');
const ColorHash = require('color-hash').default;
const cors = require('cors');
var requestIp = require('request-ip');
// Add this to the very top of the first file loaded in your app
// var apm = require('elastic-apm-node').start({
// serviceName: 'my-service-name',
// secretToken: 'gKJZdNMdFf4yLIf408',
// serverUrl: 'https://129403cb556b4d73bed31ce164b3929b.apm.ap-northeast-2.aws.elastic-cloud.com:443',
// environment: 'my-environment'
// });
dotenv.config();
const webSocket = require('./socket');
const connect = require('./schemas');
const pageRouter = require('./routes/page');
const authRouter = require('./routes/auth');
const postRouter = require('./routes/post');
const userRouter = require('./routes/user');
const anonimousRouter = require('./routes/anonimous');
const { sequelize } = require('./models');
const passportConfig = require('./passport');
const logger = require('./logger');
const app = express();
// app.get('/', (req, res) => {
// // 사용자의 IP 주소 추출
// const userIp = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
// // Elastic APM에서 사용자의 IP 주소를 태그로 추가
// apm.setCustomContext({ user_ip: userIp });
// // 로그에 사용자 IP 주소 기록
// console.log(`User IP: ${userIp}`);
// res.send('Hello, World!');
// });
let corsOptions = {
origin: '*', // 출처 허용 옵션
credential: true, // 사용자 인증이 필요한 리소스(쿠키 등) 접근
}
app.use(cors());
passportConfig(); // 패스포트 설정
connect(); // mongoDB connect
app.set('port', process.env.PORT || 8001);
app.set('view engine', 'html');
nunjucks.configure('views', {
express: app,
watch: true,
});
sequelize.sync({ force: false })
.then(() => {
console.log('== MySQL 연결 성공 ==');
})
.catch((err) => {
console.error(err);
});
// app.use(morgan('dev'));
if (process.env.NODE_ENV ==='production'){ // 배포용으로 설정
app.use(morgan('combined'));
app.use(helmet());
app.use(hpp({contentSecurityPolicy: false}));
}else{
app.use(morgan('dev'));
}
const sessionMiddleware = session({
resave: false,
saveUninitialized: false,
secret: process.env.COOKIE_SECRET,
cookie: {
httpOnly: true,
secure: false,
},
});
app.use(express.static(path.join(__dirname, 'public')));
// app.use('/img', express.static(path.join(__dirname, 'uploads')));
// app.use('/gif', express.static(path.join(__dirname, 'uploads'))); // ?
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser(process.env.COOKIE_SECRET));
app.use(sessionMiddleware);
app.use(passport.initialize());
app.use(passport.session());
makeNickname = () => {
let adj = ['달달한', '행복한', '즐거운', '아름다운', '멋있는', '귀여운', '흐뭇한', '느긋한', '재빠른', '똑똑한', '따뜻한'];
let noun = ['코코아', '고라니', '곰순이', '타잔', '곰돌이', '콩순이', '곰들이', '토끼', '기린', '호랑이', '돌고래'];
return `${adj[Math.round(Math.round(Math.random() * 10))]} ${noun[Math.round(Math.round(Math.random() * 10))]} ${Math.round(Math.round(Math.random() * 100))}`;
}
app.use((req, res, next) => {
let ip = requestIp.getClientIp(req);
res.locals.ip = ip;
if (!req.session.color) {
// const colorHash = new ColorHash();
// req.session.color = colorHash.hex(req.sessionID);
req.session.color = makeNickname();
// res.locals.nickname = "test";
}
next();
});
// app.use(session({
// resave: false,
// saveUninitialized: false,
// secret: process.env.COOKIE_SECRET,
// cookie: {
// httpOnly: true,
// secure: false,
// },
// }));
if(process.env.NODE_ENV ==='production'){
sessionOption.proxy =true;
}
app.use('/', pageRouter);
app.use('/anonimous', anonimousRouter);
app.use('/auth', authRouter);
app.use('/post', postRouter);
app.use('/user', userRouter);
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 : {};
logger.error(`${err.message} - ${res.locals.ip}`);
res.status(err.status || 500);
res.render('error');
});
const server = app.listen(app.get('port'), '0.0.0.0', () => {
console.log(app.get('port'), '번 포트에서 대기중');
});
webSocket(server, app, sessionMiddleware);
// webSocket(server, app, passport.session());