47 lines
1.2 KiB
JavaScript
47 lines
1.2 KiB
JavaScript
const DEFAULT_API_BASE_URL = 'http://localhost:3001'
|
|
|
|
function normalizeBaseUrl(baseUrl) {
|
|
return (baseUrl || DEFAULT_API_BASE_URL).replace(/\/+$/, '')
|
|
}
|
|
|
|
function normalizePath(path) {
|
|
return path.startsWith('/') ? path : `/${path}`
|
|
}
|
|
|
|
export function buildApiUrl(path) {
|
|
const baseUrl = normalizeBaseUrl(import.meta.env.VITE_API_BASE_URL)
|
|
const normalizedPath = normalizePath(path)
|
|
|
|
if (baseUrl.endsWith('/api') && normalizedPath.startsWith('/api/')) {
|
|
return `${baseUrl}${normalizedPath.slice(4)}`
|
|
}
|
|
|
|
return `${baseUrl}${normalizedPath}`
|
|
}
|
|
|
|
export function toUserFacingApiError(error, fallbackMessage) {
|
|
const rawMessage = `${error?.message ?? ''}`.trim()
|
|
|
|
if (!rawMessage) {
|
|
return fallbackMessage
|
|
}
|
|
|
|
if (
|
|
rawMessage.includes('Failed to fetch') ||
|
|
rawMessage.includes('NetworkError') ||
|
|
rawMessage.includes('Load failed')
|
|
) {
|
|
return '서버에 연결하지 못했습니다. 잠시 후 다시 시도해 주세요.'
|
|
}
|
|
|
|
if (
|
|
rawMessage.includes('Route ') ||
|
|
rawMessage.includes('not found') ||
|
|
rawMessage.includes('/api/')
|
|
) {
|
|
return '로그인 요청을 처리하지 못했습니다. 잠시 후 다시 시도해 주세요.'
|
|
}
|
|
|
|
return rawMessage
|
|
}
|