imetting_frontend/server.js

57 lines
1.5 KiB
JavaScript

const express = require("express");
const { createProxyMiddleware } = require("http-proxy-middleware");
const path = require("path");
const app = express();
const PORT = process.env.PORT;
const BACKEND_URL = process.env.BACKEND_URL || "http://localhost:8000";
// 健康检查
app.get('/health', (req, res) => {
res.json({ status: 'ok', timestamp: new Date().toISOString() });
});
// API代理 - 需要在body parser之前
app.use("/api", createProxyMiddleware({
target: BACKEND_URL,
changeOrigin: true,
timeout: 30000,
proxyTimeout: 30000
}));
// 上传文件代理
app.use("/uploads", createProxyMiddleware({
target: BACKEND_URL,
changeOrigin: true,
timeout: 30000,
proxyTimeout: 30000
}));
// 设置请求体大小限制 - 放在代理之后
app.use(express.json({ limit: '50mb' }));
app.use(express.urlencoded({ limit: '50mb', extended: true }));
// 静态文件服务
app.use(express.static(path.join(__dirname, "dist"), {
maxAge: '1d',
etag: true
}));
// SPA路由处理 - 必须放在最后
app.get("*", (req, res) => {
console.log("Proxying request to:", BACKEND_URL);
res.sendFile(path.join(__dirname, "dist", "index.html"));
});
// 错误处理中间件
app.use((err, req, res, next) => {
console.error('Server error:', err);
res.status(500).json({ error: 'Internal server error' });
});
app.listen(PORT, '0.0.0.0', () => {
console.log(`iMeeting Frontend Server running on port ${PORT}`);
console.log(`Backend proxy target: ${BACKEND_URL}`);
console.log(`Environment: ${process.env.NODE_ENV}`);
});