const { sequelize } = require('./config/database'); const jwt = require('jsonwebtoken'); require('dotenv').config(); // 测试数据库连接 async function testDatabaseConnection() { try { console.log('\n=== 测试数据库连接 ==='); console.log('使用配置:'); console.log(`- 主机: ${process.env.DB_HOST || '默认值'}`); console.log(`- 端口: ${process.env.DB_PORT || '默认值'}`); console.log(`- 数据库: ${process.env.DB_DATABASE || process.env.DB_NAME || '默认值'}`); console.log(`- 用户名: ${process.env.DB_USER || '默认值'}`); console.log(`- 密码: ${process.env.DB_PASSWORD ? '已设置 (不显示)' : '未设置'}`); await sequelize.authenticate(); console.log('✅ 数据库连接成功!'); return true; } catch (error) { console.error('❌ 数据库连接失败:', error.message); return false; } } // 测试JWT配置 function testJWTConfig() { try { console.log('\n=== 测试JWT配置 ==='); console.log(`- JWT_SECRET: ${process.env.JWT_SECRET ? '已设置 (长度: ' + process.env.JWT_SECRET.length + ')' : '未设置'}`); console.log(`- JWT_EXPIRE: ${process.env.JWT_EXPIRE || '默认值'}`); if (!process.env.JWT_SECRET) { console.error('❌ JWT_SECRET未设置!'); return false; } // 尝试生成并验证令牌 const testPayload = { test: 'data' }; const token = jwt.sign(testPayload, process.env.JWT_SECRET, { expiresIn: '1h' }); const decoded = jwt.verify(token, process.env.JWT_SECRET); console.log('✅ JWT配置有效!'); return true; } catch (error) { console.error('❌ JWT配置错误:', error.message); return false; } } // 测试模型导入 async function testModels() { try { console.log('\n=== 测试模型导入 ==='); const { User, Role } = require('./models'); console.log('✅ 用户模型导入成功'); console.log('✅ 角色模型导入成功'); // 尝试查询用户表结构 const userAttributes = User.rawAttributes; console.log(`✅ 用户表有 ${Object.keys(userAttributes).length} 个字段`); return true; } catch (error) { console.error('❌ 模型导入错误:', error.message); return false; } } // 运行所有测试 async function runTests() { console.log('\n开始测试认证相关配置...'); const dbResult = await testDatabaseConnection(); const jwtResult = testJWTConfig(); const modelsResult = await testModels(); console.log('\n=== 测试总结 ==='); console.log(`数据库连接: ${dbResult ? '通过' : '失败'}`); console.log(`JWT配置: ${jwtResult ? '通过' : '失败'}`); console.log(`模型导入: ${modelsResult ? '通过' : '失败'}`); if (dbResult && jwtResult && modelsResult) { console.log('✅ 所有测试通过!'); } else { console.error('❌ 测试失败,请检查上述错误!'); } // 关闭数据库连接 await sequelize.close(); } // 运行测试 runTests().catch(error => { console.error('测试过程中出现未捕获错误:', error); });