fix: check response.ok before parsing JSON in fetch calls
Fix JSON parsing errors when server returns non-JSON responses: - Check response.ok before calling response.json() - Add fallback error messages using status text - Apply fix to all fetch calls across 12 components This prevents 'JSON.parse: unexpected character' errors when server returns HTML error pages or other non-JSON responses.
This commit is contained in:
@@ -93,13 +93,15 @@ export default function UploadMatchesPage() {
|
||||
eventDate: new Date().toISOString(),
|
||||
}),
|
||||
})
|
||||
const data = await response.json()
|
||||
if (response.ok && data.tournament) {
|
||||
const newTournaments = [data.tournament]
|
||||
setTournaments(newTournaments)
|
||||
setSelectedTournament(data.tournament.id.toString())
|
||||
setManualTournament(data.tournament.id.toString())
|
||||
return data.tournament
|
||||
if (response.ok) {
|
||||
const data = await response.json()
|
||||
if (data.tournament) {
|
||||
const newTournaments = [data.tournament]
|
||||
setTournaments(newTournaments)
|
||||
setSelectedTournament(data.tournament.id.toString())
|
||||
setManualTournament(data.tournament.id.toString())
|
||||
return data.tournament
|
||||
}
|
||||
}
|
||||
return null
|
||||
} catch (err) {
|
||||
@@ -155,12 +157,20 @@ export default function UploadMatchesPage() {
|
||||
body: formData,
|
||||
})
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(data.error || "Failed to upload CSV")
|
||||
try {
|
||||
const errorData = await response.json()
|
||||
throw new Error(errorData.error || "Failed to upload CSV")
|
||||
} catch (jsonError) {
|
||||
if (jsonError instanceof Error && jsonError.message !== "Failed to upload CSV") {
|
||||
throw jsonError
|
||||
}
|
||||
throw new Error(`Failed to upload CSV: ${response.status} ${response.statusText}`)
|
||||
}
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
setCsvSuccess(
|
||||
`Successfully imported ${data.importedCount} matches. ` +
|
||||
`${data.errorCount || 0} errors occurred.` +
|
||||
@@ -262,12 +272,20 @@ export default function UploadMatchesPage() {
|
||||
body: JSON.stringify({ matches: matchesData }),
|
||||
})
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(data.error || "Failed to create matches")
|
||||
try {
|
||||
const errorData = await response.json()
|
||||
throw new Error(errorData.error || "Failed to create matches")
|
||||
} catch (jsonError) {
|
||||
if (jsonError instanceof Error && jsonError.message !== "Failed to create matches") {
|
||||
throw jsonError
|
||||
}
|
||||
throw new Error(`Failed to create matches: ${response.status} ${response.statusText}`)
|
||||
}
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
setManualSuccess(
|
||||
`Successfully created ${data.importedCount} matches. ` +
|
||||
`${data.errorCount || 0} errors occurred.` +
|
||||
|
||||
Reference in New Issue
Block a user