import { serveStatic } from '@hono/node-server/serve-static'; import { Hono } from 'hono'; import { cors } from 'hono/cors'; import authRouter from './auth/login.js'; import { authMiddleware } from './auth/middleware.js'; import eleRouter from './routes/ele/index.js'; import energyRouter from './routes/energy/index.js'; import feedbackRouter from './routes/feedback/index.js'; import hydrogenHeatmapRouter from './routes/hydrogen-heatmap.js'; import mileageRouter from './routes/mileage/index.js'; import schedulingRouter from './routes/scheduling/index.js'; import vehicleHeatmapRouter from './routes/vehicle-heatmap.js'; import vehiclesRouter from './routes/vehicles.js'; /** * 创建 HTTP 应用,但不监听端口、不访问数据库,也不启动后台任务。 * 保持应用装配无副作用后,测试可以安全导入路由而不会挂住进程。 */ export function createApp(): Hono { const app = new Hono(); app.use('/api/*', cors()); // 登录接口公开,其余 API 统一经过认证与数据权限检查。 app.route('/api/auth', authRouter); app.use('/api/*', authMiddleware); app.route('/api/vehicles', vehiclesRouter); app.route('/api/mileage', mileageRouter); app.route('/api/scheduling', schedulingRouter); app.route('/api/energy', energyRouter); app.route('/api/ele', eleRouter); app.route('/api/feedback', feedbackRouter); app.route('/api/vehicle-heatmap', vehicleHeatmapRouter); app.route('/api/hydrogen-heatmap', hydrogenHeatmapRouter); app.get('/api/health', (context) => context.json({ status: 'ok', time: new Date().toISOString(), })); // 生产环境由同一进程托管 Vite 构建产物,并回退到单页应用入口。 app.use('/*', serveStatic({ root: './dist' })); app.use('/*', serveStatic({ root: './dist', path: 'index.html' })); return app; }