Investigate Supabase connection issues
Investigate the cause of "Unexpected end of JSON input" error despite successful Supabase connection test.
This commit is contained in:
@@ -15,36 +15,77 @@ export const handleNetworkError = (error: any): string => {
|
||||
return 'CORS 오류가 발생했습니다. 서버 설정 또는 CORS 프록시를 확인하세요.';
|
||||
} else if (error.message && error.message.includes('NetworkError')) {
|
||||
return '네트워크 오류가 발생했습니다. 인터넷 연결을 확인하세요.';
|
||||
} else if (error.message && error.message.includes('json')) {
|
||||
return '서버 응답 형식 오류: 서버가 올바른 JSON 응답을 반환하지 않았습니다.';
|
||||
}
|
||||
|
||||
return error.message || '예상치 못한 오류가 발생했습니다.';
|
||||
};
|
||||
|
||||
// 응답 파싱 유틸리티 함수
|
||||
// 응답 파싱 유틸리티 함수 개선
|
||||
export const parseResponse = async (response: Response) => {
|
||||
try {
|
||||
// 비어있는 응답 또는 401 응답을 먼저 확인
|
||||
if (response.status === 401) {
|
||||
if (response.headers.get('content-length') === '0' || await response.clone().text() === '') {
|
||||
return {
|
||||
error: '인증 실패: 잘못된 인증 정보 또는 서버 설정 문제',
|
||||
status: 401
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// 응답 내용 확인 (디버깅용)
|
||||
const responseText = await response.text();
|
||||
console.log('응답 원본:', responseText);
|
||||
console.log('응답 원본:', responseText, 'Status:', response.status);
|
||||
|
||||
// 빈 응답 또는 공백만 있는 응답 처리
|
||||
if (!responseText || responseText.trim() === '') {
|
||||
if (response.status === 401) {
|
||||
return { error: '인증 실패: 이메일 또는 비밀번호가 올바르지 않습니다.' };
|
||||
return {
|
||||
error: '인증 실패: 서버가 인증을 거부했습니다.',
|
||||
status: 401
|
||||
};
|
||||
} else if (response.status === 404) {
|
||||
return {
|
||||
error: '서버 경로를 찾을 수 없습니다. Supabase URL을 확인하세요.',
|
||||
status: 404
|
||||
};
|
||||
} else {
|
||||
throw new Error('서버가 빈 응답을 반환했습니다');
|
||||
return {
|
||||
error: `서버가 빈 응답을 반환했습니다 (상태 코드: ${response.status})`,
|
||||
status: response.status
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
return JSON.parse(responseText);
|
||||
} catch (parseError) {
|
||||
// JSON 파싱 오류 시 응답 상태에 따른 처리
|
||||
console.error('JSON 파싱 오류:', parseError, '원본 텍스트:', responseText);
|
||||
|
||||
// HTTP 상태 코드에 따른 적절한 오류 메시지 반환
|
||||
if (response.status === 401) {
|
||||
return { error: '인증 실패: 이메일 또는 비밀번호가 올바르지 않습니다.' };
|
||||
return {
|
||||
error: '인증 실패: 이메일 또는 비밀번호가 올바르지 않습니다.',
|
||||
status: 401
|
||||
};
|
||||
} else if (response.status === 404) {
|
||||
return { error: '서버 경로를 찾을 수 없습니다. Supabase URL을 확인하세요.' };
|
||||
return {
|
||||
error: '서버 경로를 찾을 수 없습니다. Supabase URL을 확인하세요.',
|
||||
status: 404
|
||||
};
|
||||
} else if (response.status >= 500) {
|
||||
return {
|
||||
error: '서버 내부 오류가 발생했습니다.',
|
||||
status: response.status
|
||||
};
|
||||
} else {
|
||||
throw parseError;
|
||||
return {
|
||||
error: `응답 형식 오류 (상태 코드: ${response.status}): 서버가 올바른 JSON 응답을 반환하지 않았습니다.`,
|
||||
status: response.status,
|
||||
rawResponse: responseText
|
||||
};
|
||||
}
|
||||
}
|
||||
} catch (parseError) {
|
||||
|
||||
Reference in New Issue
Block a user