db.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. const mysql = require('mysql2/promise');
  2. require('dotenv').config();
  3. // 创建连接池
  4. const poolConfig = {
  5. host: process.env.DB_HOST || 'localhost',
  6. user: process.env.DB_USER || 'root',
  7. password: process.env.DB_PASSWORD || '1234',
  8. database: process.env.DB_NAME || 'recruitment_system',
  9. port: parseInt(process.env.DB_PORT) || 3307, // 确保端口是数字
  10. waitForConnections: true,
  11. connectionLimit: 10,
  12. queueLimit: 0
  13. };
  14. const pool = mysql.createPool(poolConfig);
  15. // 增强版连接测试函数
  16. const testConnection = async () => {
  17. let connection;
  18. try {
  19. console.log('🔄 正在尝试连接数据库...');
  20. console.log('连接参数:', {
  21. host: poolConfig.host,
  22. user: poolConfig.user,
  23. database: poolConfig.database,
  24. port: poolConfig.port
  25. });
  26. connection = await pool.getConnection();
  27. console.log('✅ 成功获取数据库连接');
  28. const [rows] = await connection.query('SELECT 1 + 1 AS result');
  29. console.log('测试查询结果:', rows[0].result);
  30. return true;
  31. } catch (error) {
  32. console.error('❌ 数据库连接失败:');
  33. console.error('错误信息:', error.message);
  34. console.error('错误代码:', error.code);
  35. // 更详细的错误诊断
  36. if (error.code === 'ER_ACCESS_DENIED_ERROR') {
  37. console.error('可能原因: 用户名或密码错误');
  38. } else if (error.code === 'ECONNREFUSED') {
  39. console.error('可能原因: MySQL服务未启动或端口错误');
  40. }
  41. return false;
  42. } finally {
  43. if (connection) connection.release();
  44. }
  45. };
  46. module.exports = {
  47. pool,
  48. testConnection
  49. };