From caab5109a1e8e10343a80a402725d6bcdadeb03a Mon Sep 17 00:00:00 2001 From: Daniel LaForce Date: Wed, 9 Apr 2025 22:04:17 -0600 Subject: [PATCH] Refactor contact form handling: Simplified JSON parsing and improved error messaging in both client and server scripts for better user experience and feedback. --- functions/contact.js | 73 +++++--------------------------------------- script.js | 43 +++++++++++--------------- 2 files changed, 26 insertions(+), 90 deletions(-) diff --git a/functions/contact.js b/functions/contact.js index 72215a9..6061a19 100644 --- a/functions/contact.js +++ b/functions/contact.js @@ -1,38 +1,12 @@ export async function onRequestPost(context) { try { - let requestData; - try { - requestData = await context.request.json(); - } catch (parseError) { - return new Response( - JSON.stringify({ - error: 'Invalid request data - please provide valid JSON' - }), - { - status: 400, - headers: { - 'Content-Type': 'application/json', - 'Access-Control-Allow-Origin': '*' - } - } - ); - } - - const { name, email, subject, message } = requestData; + const { name, email, subject, message } = await context.request.json(); // Validate inputs if (!name || !email || !subject || !message) { return new Response( - JSON.stringify({ - error: 'All fields are required' - }), - { - status: 400, - headers: { - 'Content-Type': 'application/json', - 'Access-Control-Allow-Origin': '*' - } - } + JSON.stringify({ error: 'All fields are required' }), + { status: 400, headers: { 'Content-Type': 'application/json' } } ); } @@ -58,49 +32,18 @@ export async function onRequestPost(context) { }) }); - const responseData = await response.json(); - if (!response.ok) { - console.error('Resend API error:', responseData); - return new Response( - JSON.stringify({ - error: 'Failed to send email' - }), - { - status: 500, - headers: { - 'Content-Type': 'application/json', - 'Access-Control-Allow-Origin': '*' - } - } - ); + throw new Error('Failed to send email'); } return new Response( - JSON.stringify({ - message: 'Message sent successfully!' - }), - { - status: 200, - headers: { - 'Content-Type': 'application/json', - 'Access-Control-Allow-Origin': '*' - } - } + JSON.stringify({ message: 'Message sent successfully!' }), + { status: 200, headers: { 'Content-Type': 'application/json' } } ); } catch (error) { - console.error('Server error:', error); return new Response( - JSON.stringify({ - error: 'An unexpected error occurred' - }), - { - status: 500, - headers: { - 'Content-Type': 'application/json', - 'Access-Control-Allow-Origin': '*' - } - } + JSON.stringify({ error: 'Failed to send message' }), + { status: 500, headers: { 'Content-Type': 'application/json' } } ); } } \ No newline at end of file diff --git a/script.js b/script.js index 1aad01f..61c83e2 100644 --- a/script.js +++ b/script.js @@ -141,7 +141,7 @@ if (contactForm) { message: formData.get('message') }; - const response = await fetch('/functions/contact', { + const response = await fetch('/contact', { method: 'POST', headers: { 'Content-Type': 'application/json' @@ -149,38 +149,31 @@ if (contactForm) { body: JSON.stringify(data) }); - let responseData; - const responseText = await response.text(); - try { - responseData = JSON.parse(responseText); - } catch (parseError) { - console.error('Failed to parse response:', responseText); - throw new Error('Invalid server response'); + const result = await response.json(); + + if (response.ok) { + // Show success message + const successMessage = document.createElement('div'); + successMessage.className = 'alert alert-success'; + successMessage.innerHTML = ' Message sent successfully! We\'ll get back to you soon.'; + contactForm.insertBefore(successMessage, submitButton); + contactForm.reset(); + + // Remove success message after 5 seconds + setTimeout(() => { + successMessage.remove(); + }, 5000); + } else { + throw new Error(result.error || 'Failed to send message'); } - if (!response.ok) { - throw new Error(responseData.error || 'Failed to send email'); - } - - // Show success message - const successMessage = document.createElement('div'); - successMessage.className = 'alert alert-success'; - successMessage.innerHTML = ' Message sent successfully! We\'ll get back to you soon.'; - contactForm.insertBefore(successMessage, submitButton); - contactForm.reset(); - - // Remove success message after 5 seconds - setTimeout(() => { - successMessage.remove(); - }, 5000); - } catch (error) { console.error('Error sending email:', error); // Show error message const errorMessage = document.createElement('div'); errorMessage.className = 'alert alert-error'; - errorMessage.innerHTML = ' ' + error.message; + errorMessage.innerHTML = ' Failed to send message. Please try again later.'; contactForm.insertBefore(errorMessage, submitButton); // Remove error message after 5 seconds