57 lines
1.5 KiB
JavaScript
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}`);
|
|
}); |