Fix Vercel deployment issues: add CORS fix, session config, and simple API version

This commit is contained in:
2025-08-21 13:06:35 +09:00
parent 9b9eb7f321
commit 43d0802442
3 changed files with 169 additions and 4 deletions

155
api/simple.js Normal file
View File

@@ -0,0 +1,155 @@
const express = require('express');
const cors = require('cors');
const path = require('path');
const app = express();
// CORS 설정 - 모든 도메인 허용
app.use(cors({
origin: true,
credentials: true
}));
// JSON 파싱
app.use(express.json({ limit: '10mb' }));
app.use(express.urlencoded({ extended: true, limit: '10mb' }));
// 정적 파일 서빙
app.use(express.static(path.join(__dirname, '..')));
// 헬스 체크
app.get('/health', (req, res) => {
res.json({
success: true,
message: 'Jaryo File Manager is running',
timestamp: new Date().toISOString(),
environment: process.env.NODE_ENV || 'development'
});
});
// 루트 경로
app.get('/', (req, res) => {
res.send(`
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Jaryo File Manager</title>
<style>
body {
font-family: Arial, sans-serif;
max-width: 800px;
margin: 0 auto;
padding: 20px;
background-color: #f5f5f5;
}
.container {
background: white;
padding: 30px;
border-radius: 10px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
h1 {
color: #333;
text-align: center;
}
.status {
background: #e8f5e8;
border: 1px solid #4caf50;
padding: 15px;
border-radius: 5px;
margin: 20px 0;
}
.feature {
background: #f0f8ff;
border: 1px solid #2196f3;
padding: 15px;
border-radius: 5px;
margin: 10px 0;
}
.button {
background: #4caf50;
color: white;
padding: 10px 20px;
border: none;
border-radius: 5px;
cursor: pointer;
text-decoration: none;
display: inline-block;
margin: 5px;
}
.button:hover {
background: #45a049;
}
</style>
</head>
<body>
<div class="container">
<h1>🚀 Jaryo File Manager</h1>
<div class="status">
<h3>✅ 배포 성공!</h3>
<p>Vercel에서 성공적으로 배포되었습니다.</p>
<p><strong>배포 시간:</strong> ${new Date().toLocaleString('ko-KR')}</p>
</div>
<div class="feature">
<h3>📁 주요 기능</h3>
<ul>
<li>파일 업로드 및 관리</li>
<li>카테고리별 분류</li>
<li>파일 검색 및 다운로드</li>
<li>관리자 기능</li>
</ul>
</div>
<div class="feature">
<h3>🔧 API 엔드포인트</h3>
<p><a href="/health" class="button">헬스 체크</a></p>
<p><a href="/api/files" class="button">파일 목록 API</a></p>
<p><a href="/api/categories" class="button">카테고리 API</a></p>
</div>
<div class="feature">
<h3>📱 페이지</h3>
<p><a href="/index.html" class="button">메인 페이지</a></p>
<p><a href="/admin/index.html" class="button">관리자 페이지</a></p>
</div>
</div>
</body>
</html>
`);
});
// API 라우트들
app.get('/api/files', (req, res) => {
res.json({
success: true,
data: [],
message: '파일 목록 API (데모 모드)'
});
});
app.get('/api/categories', (req, res) => {
res.json({
success: true,
data: [
{ id: 1, name: '문서', description: '문서 파일' },
{ id: 2, name: '이미지', description: '이미지 파일' },
{ id: 3, name: '기타', description: '기타 파일' }
],
message: '카테고리 목록'
});
});
// 404 핸들러
app.use((req, res) => {
res.status(404).json({
success: false,
error: '요청한 리소스를 찾을 수 없습니다.',
path: req.path
});
});
module.exports = app;

View File

@@ -16,7 +16,7 @@ const db = new DatabaseHelper();
// 미들웨어 설정 // 미들웨어 설정
app.use(cors({ app.use(cors({
origin: ['http://localhost:3001', 'http://127.0.0.1:3001'], origin: true, // 모든 도메인 허용 (Vercel 배포용)
credentials: true credentials: true
})); }));
app.use(express.json({ limit: '50mb' })); app.use(express.json({ limit: '50mb' }));
@@ -28,7 +28,7 @@ app.use(session({
resave: false, resave: false,
saveUninitialized: false, saveUninitialized: false,
cookie: { cookie: {
secure: false, // HTTPS에서는 true로 설정 secure: process.env.NODE_ENV === 'production', // Vercel에서는 HTTPS
httpOnly: true, httpOnly: true,
maxAge: 24 * 60 * 60 * 1000 // 24시간 maxAge: 24 * 60 * 60 * 1000 // 24시간
} }
@@ -53,6 +53,16 @@ app.get('/', (req, res) => {
res.redirect('/index.html'); res.redirect('/index.html');
}); });
// 헬스 체크 엔드포인트
app.get('/health', (req, res) => {
res.json({
success: true,
message: 'Jaryo File Manager is running',
timestamp: new Date().toISOString(),
environment: process.env.NODE_ENV || 'development'
});
});
// Multer 설정 (파일 업로드) // Multer 설정 (파일 업로드)
const storage = multer.diskStorage({ const storage = multer.diskStorage({
destination: (req, file, cb) => { destination: (req, file, cb) => {

View File

@@ -2,14 +2,14 @@
"version": 2, "version": 2,
"builds": [ "builds": [
{ {
"src": "api/index.js", "src": "api/simple.js",
"use": "@vercel/node" "use": "@vercel/node"
} }
], ],
"routes": [ "routes": [
{ {
"src": "/(.*)", "src": "/(.*)",
"dest": "/api/index.js" "dest": "/api/simple.js"
} }
], ],
"env": { "env": {