운영 이관 준비

This commit is contained in:
2025-06-05 08:09:05 +09:00
parent 989b29437b
commit 1a3706d7a5
9 changed files with 163 additions and 12 deletions
+41 -4
View File
@@ -51,11 +51,39 @@ app.set('io', io);
// app.js 또는 서버 초기화 파일
const session = require('express-session');
const MySQLStore = require('express-mysql-session')(session);
// MySQL 세션 저장소 옵션 설정
const options = {
host: process.env.DB_HOST || 'localhost',
port: process.env.DB_PORT || 3306,
user: process.env.DB_USER || 'root',
password: process.env.DB_PASSWORD || '',
database: process.env.DB_NAME || 'bowlingmanager',
// 세션 테이블 설정
schema: {
tableName: 'sessions',
columnNames: {
session_id: 'session_id',
expires: 'expires',
data: 'data'
}
}
};
// MySQL 세션 저장소 생성
const sessionStore = new MySQLStore(options);
app.use(session({
key: 'bowling_session',
secret: process.env.JWT_SECRET,
store: sessionStore,
resave: false,
saveUninitialized: false,
cookie: { secure: process.env.NODE_ENV === 'production' } // https 환경이면 true, 개발환경은 false
cookie: {
secure: process.env.NODE_ENV === 'production',
maxAge: 24 * 60 * 60 * 1000 // 1일
}
}));
// 데이터베이스 연결 및 모델 동기화 실행
@@ -83,9 +111,18 @@ app.use('/api/users', userRoutes);
app.use('/api/notifications', notificationRoutes);
app.use('/api/menus', menuRoutes);
// 루트 경로 핸들러
app.get('/', (req, res) => {
res.json({ message: '볼링 클럽 매니저 API 서버에 오신 것을 환영합니다!' });
// 정적 파일 제공 설정
const path = require('path');
app.use(express.static(path.join(__dirname, '../frontend/dist')));
// API 요청이 아닌 모든 요청은 Vue 앱으로 라우팅
app.get('*', (req, res, next) => {
// API 요청은 무시하고 다음 미들웨어로 전달
if (req.path.startsWith('/api/')) {
return next();
}
// Vue 앱의 index.html 반환
res.sendFile(path.join(__dirname, '../frontend/dist/index.html'));
});
// 서버 시작