refactor: 重构数据库配置为SQLite开发环境并移除冗余文档
This commit is contained in:
@@ -18,56 +18,85 @@ const mallModule = require('./routes/mall');
|
||||
// 加载环境变量
|
||||
dotenv.config();
|
||||
|
||||
// 数据库连接配置
|
||||
const dbConfig = {
|
||||
host: process.env.DB_HOST,
|
||||
port: process.env.DB_PORT,
|
||||
user: process.env.DB_USER,
|
||||
password: process.env.DB_PASSWORD,
|
||||
database: process.env.DB_NAME,
|
||||
charset: process.env.DB_CHARSET || 'utf8mb4',
|
||||
connectionLimit: 10,
|
||||
acquireTimeout: 60000,
|
||||
timeout: 60000
|
||||
};
|
||||
// 数据库连接
|
||||
let pool, testDatabaseConnection;
|
||||
|
||||
// 创建数据库连接池
|
||||
const pool = mysql.createPool(dbConfig);
|
||||
if (process.env.DB_TYPE === 'sqlite') {
|
||||
// 使用SQLite
|
||||
const sqliteDb = require('./database-sqlite');
|
||||
pool = sqliteDb.pool;
|
||||
testDatabaseConnection = sqliteDb.testDatabaseConnection;
|
||||
} else {
|
||||
// 使用MySQL
|
||||
const mysql = require('mysql2/promise');
|
||||
|
||||
// 数据库连接配置
|
||||
const dbConfig = {
|
||||
host: process.env.DB_HOST,
|
||||
port: process.env.DB_PORT,
|
||||
user: process.env.DB_USER,
|
||||
password: process.env.DB_PASSWORD,
|
||||
database: process.env.DB_NAME,
|
||||
charset: process.env.DB_CHARSET || 'utf8mb4',
|
||||
connectionLimit: 10,
|
||||
acquireTimeout: 60000,
|
||||
timeout: 60000
|
||||
};
|
||||
|
||||
// 测试数据库连接
|
||||
async function testDatabaseConnection() {
|
||||
try {
|
||||
const connection = await pool.getConnection();
|
||||
console.log('✅ 数据库连接成功');
|
||||
console.log(`📍 连接到: ${process.env.DB_HOST}:${process.env.DB_PORT}/${process.env.DB_NAME}`);
|
||||
connection.release();
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error('❌ 数据库连接失败:', error.message);
|
||||
console.log('⚠️ 服务将继续运行,但数据库功能不可用');
|
||||
return false;
|
||||
}
|
||||
// 创建数据库连接池
|
||||
pool = mysql.createPool(dbConfig);
|
||||
|
||||
// 测试数据库连接
|
||||
testDatabaseConnection = async function() {
|
||||
try {
|
||||
const connection = await pool.getConnection();
|
||||
console.log('✅ MySQL数据库连接成功');
|
||||
console.log(`📍 连接到: ${process.env.DB_HOST}:${process.env.DB_PORT}/${process.env.DB_NAME}`);
|
||||
connection.release();
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error('❌ 数据库连接失败:', error.message);
|
||||
console.log('⚠️ 服务将继续运行,但数据库功能不可用');
|
||||
return false;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// 启动时测试数据库连接(不阻塞服务启动)
|
||||
testDatabaseConnection();
|
||||
|
||||
// 创建Express应用
|
||||
const app = express();
|
||||
const PORT = process.env.PORT || 8888;
|
||||
|
||||
// 设置路由模块的数据库连接
|
||||
authModule.setPool(pool);
|
||||
usersModule.setMiddleware(authModule.authenticateToken, authModule.checkPermission, pool);
|
||||
cattleModule.setMiddleware(authModule.authenticateToken, authModule.checkPermission, pool);
|
||||
financeModule.setMiddleware(authModule.authenticateToken, authModule.checkPermission, pool);
|
||||
tradingModule.setMiddleware(authModule.authenticateToken, authModule.checkPermission, pool);
|
||||
governmentModule.setMiddleware(authModule.authenticateToken, authModule.checkPermission, pool);
|
||||
mallModule.setMiddleware(authModule.authenticateToken, authModule.checkPermission, pool);
|
||||
// 初始化数据库和中间件的异步函数
|
||||
async function initializeApp() {
|
||||
// 启动时测试数据库连接
|
||||
await testDatabaseConnection();
|
||||
|
||||
// 设置路由模块的数据库连接
|
||||
authModule.setPool(pool);
|
||||
usersModule.setMiddleware(authModule.authenticateToken, authModule.checkPermission, pool);
|
||||
cattleModule.setMiddleware(authModule.authenticateToken, authModule.checkPermission, pool);
|
||||
financeModule.setMiddleware(authModule.authenticateToken, authModule.checkPermission, pool);
|
||||
tradingModule.setMiddleware(authModule.authenticateToken, authModule.checkPermission, pool);
|
||||
governmentModule.setMiddleware(authModule.authenticateToken, authModule.checkPermission, pool);
|
||||
mallModule.setMiddleware(authModule.authenticateToken, authModule.checkPermission, pool);
|
||||
|
||||
console.log('✅ 中间件初始化完成');
|
||||
}
|
||||
|
||||
// 初始化应用(不阻塞服务启动)
|
||||
initializeApp().catch(console.error);
|
||||
|
||||
// 导入错误处理中间件
|
||||
const { errorHandler, notFoundHandler, requestLogger, performanceMonitor } = require('./middleware/errorHandler');
|
||||
|
||||
// 中间件
|
||||
app.use(requestLogger); // 请求日志
|
||||
app.use(performanceMonitor); // 性能监控
|
||||
app.use(helmet()); // 安全头部
|
||||
app.use(cors()); // 跨域支持
|
||||
app.use(cors({
|
||||
origin: process.env.CORS_ORIGIN || '*',
|
||||
credentials: true
|
||||
})); // 跨域支持
|
||||
app.use(express.json({ limit: '10mb' })); // JSON解析
|
||||
app.use(express.urlencoded({ extended: true, limit: '10mb' })); // URL编码解析
|
||||
|
||||
@@ -283,9 +312,19 @@ app.get('/api/v1/dashboard/map/region/:regionId', (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
// 错误处理中间件(必须放在所有路由之后)
|
||||
app.use(notFoundHandler); // 404处理
|
||||
app.use(errorHandler); // 统一错误处理
|
||||
|
||||
// 启动服务器
|
||||
app.listen(PORT, () => {
|
||||
console.log(`API服务器正在端口 ${PORT} 上运行`);
|
||||
const HOST = process.env.HOST || '0.0.0.0';
|
||||
|
||||
app.listen(PORT, HOST, () => {
|
||||
console.log(`API服务器正在监听: http://${HOST}:${PORT}`);
|
||||
console.log(`服务器绑定到: ${HOST}, 端口: ${PORT}`);
|
||||
console.log('尝试使用以下URL访问:');
|
||||
console.log(` http://localhost:${PORT}`);
|
||||
console.log(` http://127.0.0.1:${PORT}`);
|
||||
});
|
||||
|
||||
module.exports = app;
|
||||
Reference in New Issue
Block a user