diff --git a/examples/ssr/src/api.ts b/examples/ssr/src/api.ts index 74e09eb735f3..2d10a85f9efc 100644 --- a/examples/ssr/src/api.ts +++ b/examples/ssr/src/api.ts @@ -17,49 +17,42 @@ interface Cart { }>; } -async function get( +async function getJson( incomingReq: Request, endpoint: string, - cb: (response: Response) => Promise ): Promise { const origin = new URL(incomingReq.url).origin; - const response = await fetch(`${origin}${endpoint}`, { - credentials: 'same-origin', - headers: incomingReq.headers, - }); - if (!response.ok) { - // TODO make this better... - throw new Error('Fetch failed'); + try { + const response = await fetch(`${origin}${endpoint}`, { + credentials: 'same-origin', + headers: incomingReq.headers, + }); + if (!response.ok) { + throw new Error(`GET ${endpoint} failed: ${response.statusText}`); + } + return response.json() as Promise; + } catch (error) { + if (error instanceof DOMException || error instanceof TypeError) { + throw new Error(`GET ${endpoint} failed: ${error.message}`); + } + throw error; } - return cb(response); } export async function getProducts(incomingReq: Request): Promise { - return get(incomingReq, '/api/products', async (response) => { - const products: Product[] = await response.json(); - return products; - }); + return getJson(incomingReq, '/api/products'); } export async function getProduct(incomingReq: Request, id: number): Promise { - return get(incomingReq, `/api/products/${id}`, async (response) => { - const product: Product = await response.json(); - return product; - }); + return getJson(incomingReq, `/api/products/${id}`); } export async function getUser(incomingReq: Request): Promise { - return get(incomingReq, `/api/user`, async (response) => { - const user: User = await response.json(); - return user; - }); + return getJson(incomingReq, `/api/user`); } export async function getCart(incomingReq: Request): Promise { - return get(incomingReq, `/api/cart`, async (response) => { - const cart: Cart = await response.json(); - return cart; - }); + return getJson(incomingReq, `/api/cart`); } export async function addToUserCart(id: number | string, name: string): Promise {