From fa38e0054b7e290c02fd581b73787acf2bf189ea Mon Sep 17 00:00:00 2001 From: dm1sh Date: Mon, 9 Aug 2021 14:05:57 +0300 Subject: [PATCH] Tried to improve error handling on book upload --- src/serviceWorker/fetchHandlers.ts | 8 ++++++-- src/serviceWorker/utils.ts | 6 ++++++ src/utils/api.ts | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/serviceWorker/fetchHandlers.ts b/src/serviceWorker/fetchHandlers.ts index 4e6c316..6872d0a 100644 --- a/src/serviceWorker/fetchHandlers.ts +++ b/src/serviceWorker/fetchHandlers.ts @@ -1,4 +1,5 @@ import { getBook, getBooks, saveBook } from "./db"; +import { composeResponseStatus } from "./utils"; export interface PathHandler { /** Path start for handler */ @@ -31,7 +32,7 @@ export const handleBookUpload = async (request: Request) => { return new Response(JSON.stringify(book)); } else throw new Error(res.status.toString() + res.statusText); } catch (err) { - return new Response(JSON.stringify(err)); + return new Response(JSON.stringify(err), composeResponseStatus(err)); } }; @@ -51,5 +52,8 @@ export const handleBook = async (request: Request, hash: string) => { const book = await getBook(hash); if (book) return new Response(JSON.stringify(book)); - return new Response("No such book :("); + return new Response(null, { + status: 404, + statusText: "No such book :(", + }); }; diff --git a/src/serviceWorker/utils.ts b/src/serviceWorker/utils.ts index c236df6..a842d73 100644 --- a/src/serviceWorker/utils.ts +++ b/src/serviceWorker/utils.ts @@ -7,3 +7,9 @@ export const getHash = (path: string) => { return path.substr("/book/".length, hashLength); }; + +export const composeResponseStatus = (err: Error): ResponseInit => { + if (err.name === "NetowrkError") + return { status: 503, statusText: err.message }; + else return { status: 500, statusText: "Something bad happened (IDK)" }; +}; diff --git a/src/utils/api.ts b/src/utils/api.ts index bc6f6e5..e14b4ad 100644 --- a/src/utils/api.ts +++ b/src/utils/api.ts @@ -45,7 +45,7 @@ export const validateResponse = (content: unknown): content is BookT => { if (!(key in content)) { if (process.env.NODE_ENV === "development") console.error(`${key} is not specified in server response`); - return false; + throw new Error(`${key} is not specified in server response`); } return true;