/** * 应用配置 */ const isProduction = process.env.NODE_ENV === 'production'; const jwtSecret = process.env.JWT_SECRET || ''; if (isProduction && !jwtSecret) { throw new Error('JWT_SECRET must be set in production'); } module.exports = { // 服务器配置 port: process.env.PORT || 3000, host: process.env.HOST || (isProduction ? '127.0.0.1' : '0.0.0.0'), trustProxy: process.env.TRUST_PROXY || (isProduction ? 'loopback' : false), // JWT 配置 jwtSecret: jwtSecret || 'dev-only-gamer-order-secret', jwtExpiresIn: '7d', // 注册默认关闭,生产环境可通过 ENABLE_REGISTRATION=true 显式开启 enableRegistration: process.env.ENABLE_REGISTRATION === 'true', // CORS 配置:默认同源;如需跨域,用逗号分隔配置 CORS_ORIGINS corsOrigins: (process.env.CORS_ORIGINS || '') .split(',') .map(s => s.trim()) .filter(Boolean), // 缓存配置 cache: { ttl: 2 * 60 * 1000, // 缓存有效期 2 分钟 maxSize: 100 // 最大缓存条目数 }, // 分页配置 pagination: { defaultLimit: 20, // 默认每页条数 maxLimit: 100 // 最大每页条数 }, import: { maxRecords: 5000 }, // 日志配置 log: { level: process.env.LOG_LEVEL || 'info', // debug, info, warn, error colorize: true }, // 允许的类别 categories: { income: ['接单', '派单', '红包收入', '奶茶'], expense: ['红包支出', '比心', '其他支出'] }, // 允许的联系人字段 contactFields: ['boss', 'partner', 'source', 'destination'] };