var express = require('express'); var path = require('path'); var cookieParser = require('cookie-parser'); var logger = require('morgan'); const {specs, swaggerUi} = require('./config/swagger'); // 引入 swagger 配置 const cors = require('cors'); const bodyParser = require('body-parser'); // region api导入 var commonRouter = require('./routes/common'); var captchaRouter = require('./routes/captcha'); var authRouter = require('./routes/auth'); var smsRouter = require('./routes/sms'); var mallRouter = require('./routes/mall'); var programRouter = require('./routes/program'); var uploadRouter = require('./routes/upload') // endregion var app = express(); // 中间件配置 // CORS配置 - 允许前端访问静态资源 app.use(cors({ origin: [ 'http://localhost:5173', 'http://localhost:5176', 'http://localhost:5175', 'http://localhost:5174', 'http://localhost:3001', 'https://www.zrbjr.com', 'https://zrbjr.com' ], credentials: true, methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], allowedHeaders: ['Content-Type', 'Authorization', 'X-Requested-With'] })); app.use(bodyParser.json({ limit: '10mb' })); app.use(bodyParser.urlencoded({ extended: true, limit: '10mb' })); // 静态文件服务 - 必须在API路由之前 // 为uploads路径配置CORS和静态文件服务 app.use('/uploads', express.static(path.join(__dirname, 'uploads'), { setHeaders: (res, filePath) => { // 设置CORS头部 res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, OPTIONS'); res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); // 设置缓存和内容类型 if (filePath.endsWith('.jpg') || filePath.endsWith('.jpeg')) { res.setHeader('Content-Type', 'image/jpeg'); } else if (filePath.endsWith('.png')) { res.setHeader('Content-Type', 'image/png'); } else if (filePath.endsWith('.gif')) { res.setHeader('Content-Type', 'image/gif'); } else if (filePath.endsWith('.webp')) { res.setHeader('Content-Type', 'image/webp'); } res.setHeader('Cache-Control', 'public, max-age=86400'); // 1天缓存 } })); app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(specs)); // swagger app.use(logger('dev')); app.use(express.json()); app.use(express.urlencoded({extended: false})); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); // region api配置 app.use('/api/upload', uploadRouter) app.use('/api/common', commonRouter) app.use('/api/captcha', captchaRouter) app.use('/api/auth', authRouter) app.use('/api/sms', smsRouter) app.use('/api/mall', mallRouter) app.use('/api/program', programRouter) // endregion module.exports = app;