server.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. const express = require('express');
  2. const cors = require('cors');
  3. const bodyParser = require('body-parser');
  4. const path = require('path');
  5. const { initDatabase } = require('./database/init');
  6. const issueRoutes = require('./routes/issues');
  7. const projectRoutes = require('./routes/projects');
  8. const app = express();
  9. const PORT = process.env.PORT || 3000;
  10. // 中介軟體設定
  11. app.use(cors());
  12. app.use(bodyParser.json());
  13. app.use(bodyParser.urlencoded({ extended: true }));
  14. // 靜態檔案服務
  15. app.use(express.static(path.join(__dirname, 'public')));
  16. // 路由設定
  17. app.use('/api/issues', issueRoutes);
  18. app.use('/api/projects', projectRoutes);
  19. // 首頁路由
  20. app.get('/', (req, res) => {
  21. res.sendFile(path.join(__dirname, 'public', 'index.html'));
  22. });
  23. // 錯誤處理中介軟體
  24. app.use((err, req, res, next) => {
  25. console.error(err.stack);
  26. res.status(500).json({
  27. success: false,
  28. message: '伺服器內部錯誤',
  29. error: process.env.NODE_ENV === 'development' ? err.message : '請稍後再試'
  30. });
  31. });
  32. // 404 處理
  33. app.use((req, res) => {
  34. res.status(404).json({
  35. success: false,
  36. message: '找不到請求的資源'
  37. });
  38. });
  39. // 初始化資料庫並啟動伺服器
  40. initDatabase().then(() => {
  41. app.listen(PORT, () => {
  42. console.log(`🚀 MAA測試問題追蹤系統已啟動`);
  43. console.log(`📍 伺服器運行在: http://localhost:${PORT}`);
  44. console.log(`📊 管理介面: http://localhost:${PORT}`);
  45. });
  46. }).catch(err => {
  47. console.error('❌ 資料庫初始化失敗:', err);
  48. process.exit(1);
  49. });
  50. module.exports = app;