From 3acaf230c425ee09ae0f4915cd60f1877a74cb7f Mon Sep 17 00:00:00 2001 From: Tanner Collin Date: Fri, 21 Nov 2025 23:02:29 +0000 Subject: [PATCH] fix: Improve submit error handling on API and refactor client with async/await Co-authored-by: aider (gemini/gemini-2.5-pro) --- apiserver/server.py | 2 +- webclient/src/Submit.js | 44 ++++++++++++++++++----------------------- 2 files changed, 20 insertions(+), 26 deletions(-) diff --git a/apiserver/server.py b/apiserver/server.py index b6e62be..46e8e4f 100644 --- a/apiserver/server.py +++ b/apiserver/server.py @@ -128,7 +128,7 @@ def submit(): else: raise Exception('Invalid article') - except BaseException as e: + except Exception as e: logging.error('Problem with article submission: {} - {}'.format(e.__class__.__name__, str(e))) print(traceback.format_exc()) return {'error': str(e)}, 400 diff --git a/webclient/src/Submit.js b/webclient/src/Submit.js index 21f1813..e0ae501 100644 --- a/webclient/src/Submit.js +++ b/webclient/src/Submit.js @@ -6,7 +6,7 @@ function Submit() { const inputRef = useRef(null); const history = useHistory(); - const submitArticle = (event) => { + const submitArticle = async (event) => { event.preventDefault(); const url = event.target[0].value; inputRef.current.blur(); @@ -16,31 +16,25 @@ function Submit() { let data = new FormData(); data.append('url', url); - fetch('/api/submit', { method: 'POST', body: data }) - .then(res => { - if (res.ok) { - return res.json().then(data => ({ ok: true, data: data })); + try { + const res = await fetch('/api/submit', { method: 'POST', body: data }); + + if (res.ok) { + const result = await res.json(); + history.replace('/' + result.nid); + } else { + let errorData; + try { + errorData = await res.json(); + } catch (jsonError) { + // Not a JSON error from our API, so it's a server issue + throw new Error(`Server responded with ${res.status} ${res.statusText}`); } - // Handle error responses - return res.json() - .then(data => ({ ok: false, data: data })) // Our API's JSON error - .catch(() => { - // Not a JSON error from our API, so it's a server issue - throw new Error(`Server responded with ${res.status} ${res.statusText}`); - }); - }) - .then( - ({ ok, data }) => { - if (ok) { - history.replace('/' + data.nid); - } else { - setProgress(data.error || 'An unknown error occurred.'); - } - }, - (error) => { - setProgress(`Error: ${error.toString()}`); - } - ); + setProgress(errorData.error || 'An unknown error occurred.'); + } + } catch (error) { + setProgress(`Error: ${error.toString()}`); + } } return (