-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathserver.js
More file actions
139 lines (122 loc) · 4.51 KB
/
server.js
File metadata and controls
139 lines (122 loc) · 4.51 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 cors = require('cors');
const session = require('express-session');
const path = require('path');
const dotenv = require('dotenv');
const connectDB = require('./config/db');
const User = require('./db/User'); // 유저 모델 추가
const http = require('http'); // 추가
const { Server } = require('socket.io'); // 추가
// 라우터 추가
const mentorRequestRouter = require('./service/mentorRequest');
const mentoringRouter = require('./service/mentoring');
dotenv.config();
const app = express();
const server = http.createServer(app); // 변경
const io = new Server(server); // 추가
const PORT = process.env.PORT || 5000;
// Middleware 설정
app.use(cors());
app.use(express.json());
app.use(bodyParser.json());
app.use(express.urlencoded({ extended: true }));
app.use(express.static(path.join(__dirname, 'templates')));
app.use('/static', express.static(path.join(__dirname, 'static')));
app.use('/uploads', express.static(path.join(__dirname, 'uploads')));
// 세션 설정
app.use(session({
secret: process.env.SESSION_SECRET || 'defaultSecret',
resave: false,
saveUninitialized: true,
cookie: { secure: process.env.NODE_ENV === 'production' }
}));
// connectDB 함수 호출
connectDB();
// EJS 설정
app.engine('ejs', require('ejs').__express);
app.set("view engine", "ejs");
app.set("views", path.join(__dirname, "templates"));
// 로그인된 사용자 정보를 모든 EJS 템플릿에 전달
app.use((req, res, next) => {
res.locals.currentUser = req.session.user || null;
next();
});
// 서비스 라우트 설정
app.use("/register", require("./service/register"));
app.use("/login", require("./service/login"));
app.use("/", require("./service/main"));
app.use("/logout", require("./service/logout"));
app.use("/editProfile", require("./service/editProfile"));
app.use("/createPost", require("./service/createPost")); // 게시물 작성 API 라우트 추가
app.use("/comments", require("./service/comment")); // 댓글 라우트 추가
app.use('/board', require('./service/board'));
app.use('/showPost', require('./service/showPost'));
app.use('/addComment', require('./service/addComment'));
app.use('/getComments', require('./service/getComments'));
app.use('/addLike', require('./service/addlike'));
app.use("/gettopwriter", require("./service/gettopwriter"));
app.use('/chat', require('./service/chat'));
app.use('/upload', require('./service/chat'));
app.use('/store-response', require('./service/chat'));
app.use('/process-pdf', require('./service/chat'));
app.use('/updateRoadmap', require('./service/chat')); // roadmap 업데이트
app.use('/searchPost', require('./service/searchPost'));
app.use('/profile', require('./service/profile'));
app.use('/mentoringChat', require('./service/mentoringChat'));
app.use('/mentor', mentorRequestRouter);
app.use('/mentoring', mentoringRouter); // 멘토링 라우트 사용
// 로그인 페이지 라우팅
app.get("/login", (req, res) => {
res.render("login");
});
// 회원가입 페이지 라우팅
app.get("/register", (req, res) => {
res.render("register");
});
// 댓글 테스트 페이지 라우팅
app.get("/commentTest", (req, res) => {
res.sendFile(path.join(__dirname, 'templates', 'commentTest.html'));
});
// 댓글 목록 페이지 라우팅
app.get("/commentList", (req, res) => {
res.sendFile(path.join(__dirname, 'templates', 'commentList.html'));
});
// 로그인된 사용자 정보 반환 API
app.get('/api/auth/user', (req, res) => {
if (!req.session.user) {
return res.status(401).json({ message: 'Not authenticated' });
}
res.status(200).json(req.session.user);
});
// 프로필 검색 라우팅 추가
app.get('/searchprofile/name/:name', async (req, res) => {
try {
const user = await User.findOne({ name: req.params.name });
if (!user) {
return res.status(404).send('User not found');
}
res.render('userProfile', { user });
} catch (error) {
res.status(500).send('Server error');
}
});
io.on('connection', (socket) => {
console.log('a user connected');
socket.on('disconnect', () => {
console.log('user disconnected');
});
socket.on('chat message', async (msg) => {
try {
const user = await User.findOne({ id: msg.senderId });
if (user) {
msg.sender = user.name; // 사용자 이름 설정
io.emit('chat message', msg);
}
} catch (error) {
console.error('Error fetching user:', error);
}
});
});
// 서버 시작
server.listen(PORT, () => console.log(`Server started on port ${PORT}`));