index.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import express from "express";
  2. import cors from "cors";
  3. import path from "path";
  4. import { initDatabase } from "./db/database";
  5. import { seedTemplates } from "./db/seed";
  6. import { templatesRouter } from "./routes/templates";
  7. import { creativesRouter } from "./routes/creatives";
  8. import { assetsRouter } from "./routes/assets";
  9. import { buildsRouter } from "./routes/builds";
  10. import { previewRouter } from "./routes/preview";
  11. import { onThemeSaved } from "./routes/preview";
  12. import { errorHandler } from "./middleware/errorHandler";
  13. const PORT = process.env.PORT || 3001;
  14. const STORAGE_DIR = path.resolve(__dirname, "../../../storage");
  15. const CLIENT_DIST = path.resolve(__dirname, "../../client/dist");
  16. async function main() {
  17. // 初始化数据库
  18. const db = initDatabase(STORAGE_DIR);
  19. seedTemplates(db);
  20. const app = express();
  21. // 中间件
  22. app.use(cors());
  23. app.use(express.json());
  24. // API 路由
  25. app.use("/api/v1/templates", templatesRouter(db));
  26. app.use("/api/v1/creatives", creativesRouter(db, STORAGE_DIR, onThemeSaved));
  27. app.use("/api/v1", assetsRouter(db, STORAGE_DIR));
  28. app.use("/api/v1", buildsRouter(db, STORAGE_DIR, onThemeSaved));
  29. app.use("/api/v1", previewRouter(db, STORAGE_DIR));
  30. // 生产环境:serve React 静态文件
  31. app.use(express.static(CLIENT_DIST));
  32. app.get("*", (_req, res) => {
  33. res.sendFile(path.join(CLIENT_DIST, "index.html"));
  34. });
  35. // 错误处理
  36. app.use(errorHandler);
  37. app.listen(PORT, () => {
  38. console.log(`[platform] Server running at http://localhost:${PORT}`);
  39. console.log(`[platform] Storage: ${STORAGE_DIR}`);
  40. });
  41. }
  42. main().catch((err) => {
  43. console.error("Failed to start server:", err);
  44. process.exit(1);
  45. });