47 lines
1.2 KiB
JavaScript
47 lines
1.2 KiB
JavaScript
const express = require('express');
|
|
const cors = require('cors');
|
|
const swaggerUi = require('swagger-ui-express');
|
|
const logger = require('./config/logger');
|
|
const swaggerSpec = require('./config/swagger');
|
|
const routes = require('./routes');
|
|
const { notFound, errorHandler } = require('./middlewares/errorHandler');
|
|
|
|
/**
|
|
* 创建 Express 应用
|
|
*/
|
|
function createApp() {
|
|
const app = express();
|
|
|
|
// 中间件配置
|
|
app.use(cors()); // 跨域支持
|
|
app.use(express.json()); // JSON 解析
|
|
app.use(express.urlencoded({ extended: true })); // URL 编码解析
|
|
app.use(logger); // 日志记录
|
|
|
|
// API 文档 - Swagger UI
|
|
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec, {
|
|
explorer: true,
|
|
customCss: '.swagger-ui .topbar { display: none }',
|
|
customSiteTitle: 'Steel Prices Service API Documentation',
|
|
swaggerOptions: {
|
|
persistAuthorization: true,
|
|
displayRequestDuration: true,
|
|
docExpansion: 'list',
|
|
filter: true,
|
|
showRequestHeaders: true,
|
|
tryItOutEnabled: true
|
|
}
|
|
}));
|
|
|
|
// 路由
|
|
app.use('/', routes);
|
|
|
|
// 错误处理
|
|
app.use(notFound);
|
|
app.use(errorHandler);
|
|
|
|
return app;
|
|
}
|
|
|
|
module.exports = createApp;
|