Skip to content

Commit d3f9fc7

Browse files
committed
fix: enhance error handling in login and registration forms with improved type safety and user feedback
1 parent 6ba5c0e commit d3f9fc7

File tree

2 files changed

+84
-14
lines changed

2 files changed

+84
-14
lines changed

services/frontend/src/views/Login.vue

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,15 +62,27 @@ const clearError = () => {
6262
errorMessage.value = ''
6363
}
6464
65+
interface LoginError {
66+
name?: string;
67+
message?: string;
68+
status?: number;
69+
}
70+
71+
interface PotentialError {
72+
name?: unknown;
73+
message?: unknown;
74+
status?: unknown;
75+
}
76+
6577
// Handle different types of errors
66-
const handleError = (error: any) => {
67-
if (error.name === 'TypeError' && error.message.includes('fetch')) {
78+
const handleError = (error: LoginError) => {
79+
if (error.name === 'TypeError' && error.message && error.message.includes('fetch')) {
6880
// Network error - backend is down
6981
errorMessage.value = t('login.errors.networkError')
70-
} else if (error.status === 401) {
82+
} else if (error.status && error.status === 401) {
7183
// Unauthorized - invalid credentials
7284
errorMessage.value = t('login.errors.invalidCredentials')
73-
} else if (error.status >= 500) {
85+
} else if (error.status && error.status >= 500) {
7486
// Server error
7587
errorMessage.value = t('login.errors.serverError')
7688
} else if (error.name === 'AbortError') {
@@ -118,9 +130,32 @@ const onSubmit = form.handleSubmit(async (values) => {
118130
// Handle successful login - redirect to dashboard or home
119131
router.push('/dashboard')
120132
121-
} catch (error) {
122-
console.error('Login error:', error)
123-
handleError(error)
133+
} catch (e) {
134+
console.error('Login error:', e);
135+
const errorToHandle: LoginError = { message: t('login.errors.unknownError') };
136+
const potentialError = e as PotentialError;
137+
138+
if (typeof potentialError.name === 'string') {
139+
errorToHandle.name = potentialError.name;
140+
}
141+
if (typeof potentialError.message === 'string') {
142+
errorToHandle.message = potentialError.message;
143+
}
144+
if (typeof potentialError.status === 'number') {
145+
errorToHandle.status = potentialError.status;
146+
}
147+
148+
// If it's a standard Error instance, prefer its properties
149+
if (e instanceof Error) {
150+
errorToHandle.name = e.name;
151+
errorToHandle.message = e.message;
152+
}
153+
154+
// Ensure message is always set if not already by previous checks
155+
if (!errorToHandle.message) {
156+
errorToHandle.message = t('login.errors.unknownError');
157+
}
158+
handleError(errorToHandle);
124159
} finally {
125160
isLoading.value = false
126161
}

services/frontend/src/views/Register.vue

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -91,15 +91,27 @@ const clearError = () => {
9191
successMessage.value = ''
9292
}
9393
94+
interface RegisterError {
95+
name?: string;
96+
message?: string;
97+
status?: number;
98+
}
99+
100+
interface PotentialError {
101+
name?: unknown;
102+
message?: unknown;
103+
status?: unknown;
104+
}
105+
94106
// Handle different types of errors
95-
const handleError = (error: any) => {
96-
if (error.name === 'TypeError' && error.message.includes('fetch')) {
107+
const handleError = (error: RegisterError) => {
108+
if (error.name === 'TypeError' && error.message && error.message.includes('fetch')) {
97109
// Network error - backend is down
98110
errorMessage.value = 'Unable to connect to server. Please try again later.'
99-
} else if (error.status === 409) {
111+
} else if (error.status && error.status === 409) {
100112
// Conflict - username or email already exists
101113
errorMessage.value = error.message || 'Username or email already exists.'
102-
} else if (error.status >= 500) {
114+
} else if (error.status && error.status >= 500) {
103115
// Server error
104116
errorMessage.value = 'Server error occurred. Please try again later.'
105117
} else if (error.name === 'AbortError') {
@@ -157,9 +169,32 @@ const onSubmit = form.handleSubmit(async (values) => {
157169
router.push('/login')
158170
}, 2000)
159171
160-
} catch (error) {
161-
console.error('Registration error:', error)
162-
handleError(error)
172+
} catch (e) {
173+
console.error('Registration error:', e);
174+
const errorToHandle: RegisterError = { message: t('register.errors.unknownError', 'An unexpected error occurred during registration.') }; // Default message
175+
const potentialError = e as PotentialError;
176+
177+
if (typeof potentialError.name === 'string') {
178+
errorToHandle.name = potentialError.name;
179+
}
180+
if (typeof potentialError.message === 'string') {
181+
errorToHandle.message = potentialError.message;
182+
}
183+
if (typeof potentialError.status === 'number') {
184+
errorToHandle.status = potentialError.status;
185+
}
186+
187+
// If it's a standard Error instance, prefer its properties
188+
if (e instanceof Error) {
189+
errorToHandle.name = e.name;
190+
errorToHandle.message = e.message;
191+
}
192+
193+
// Ensure message is always set if not already by previous checks
194+
if (!errorToHandle.message) {
195+
errorToHandle.message = t('register.errors.unknownError', 'An unexpected error occurred during registration.');
196+
}
197+
handleError(errorToHandle);
163198
} finally {
164199
isLoading.value = false
165200
}

0 commit comments

Comments
 (0)