[FIX] Enhanced DB diagnostic messages for connection testing

This commit is contained in:
choibk 2026-01-26 09:33:53 +09:00
parent 576880c5bd
commit 3aa442e0fa
2 changed files with 26 additions and 2 deletions

View File

@ -153,6 +153,20 @@ router.post('/test-db', isAuthenticated, hasRole('admin'), async (req, res) => {
let conn; let conn;
try { try {
// 1. Try to connect without specifying database first to see if credentials/host are OK
try {
const basicConn = await mysql.createConnection({
host, user, password, port: parseInt(port) || 3306, connectTimeout: 3000
});
await basicConn.end();
} catch (basicErr) {
return res.status(400).json({
success: false,
error: `서버 접속 실패: 계정 정보나 호스트/포트를 확인하세요. (${basicErr.message})`
});
}
// 2. Try to connect with database
conn = await mysql.createConnection({ conn = await mysql.createConnection({
host, host,
user, user,
@ -164,7 +178,13 @@ router.post('/test-db', isAuthenticated, hasRole('admin'), async (req, res) => {
await conn.query('SELECT 1'); await conn.query('SELECT 1');
res.json({ success: true, message: '연결 성공: 데이터베이스에 성공적으로 접속되었습니다.' }); res.json({ success: true, message: '연결 성공: 데이터베이스에 성공적으로 접속되었습니다.' });
} catch (err) { } catch (err) {
res.status(400).json({ success: false, error: err.message }); let msg = err.message;
if (err.code === 'ER_BAD_DB_ERROR') {
msg = `데이터베이스 '${database}'가 존재하지 않습니다. MariaDB에서 스키마를 먼저 생성해 주세요.`;
} else if (err.code === 'ER_ACCESS_DENIED_ERROR') {
msg = '사용자 계정 또는 비밀번호가 일치하지 않거나, 해당 DB에 대한 접근 권한이 없습니다.';
}
res.status(400).json({ success: false, error: msg });
} finally { } finally {
if (conn) await conn.end(); if (conn) await conn.end();
} }

View File

@ -151,7 +151,11 @@ export function BasicSettingsPage() {
setTestResult({ success: true, message: res.data.message }); setTestResult({ success: true, message: res.data.message });
setIsDbVerified(true); setIsDbVerified(true);
} catch (error: any) { } catch (error: any) {
setTestResult({ success: false, message: error.response?.data?.error || '접속 테스트에 실패했습니다.' }); const detailedError = error.response?.data?.error || error.message || '알 수 없는 오류가 발생했습니다.';
setTestResult({
success: false,
message: `접속 실패: ${detailedError}`
});
setIsDbVerified(false); setIsDbVerified(false);
} finally { } finally {
setTesting(false); setTesting(false);