diff options
| author | Fuwn <[email protected]> | 2024-01-22 09:04:03 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2024-01-22 09:04:03 -0800 |
| commit | 792b5e433fc742f3ecf0ad05e3eaf60e6a7452f0 (patch) | |
| tree | 86eae019025da7c098b0dce2af8651e3342caa67 | |
| parent | fix(wrangler): configuration (diff) | |
| download | cf-image-proxy-792b5e433fc742f3ecf0ad05e3eaf60e6a7452f0.tar.xz cf-image-proxy-792b5e433fc742f3ecf0ad05e3eaf60e6a7452f0.zip | |
fix(index.js): handle errors
| -rw-r--r-- | src/index.js | 148 |
1 files changed, 79 insertions, 69 deletions
diff --git a/src/index.js b/src/index.js index 4557062..5be4e8b 100644 --- a/src/index.js +++ b/src/index.js @@ -6,79 +6,89 @@ import { resolveRequest } from './resolve-request' import { globalResHeaders } from './global-res-headers' addEventListener('fetch', (event) => { - event.respondWith(handleFetchEvent(event)) + event.respondWith(handleFetchEvent(event)) }) /** * @param {*} event */ async function handleFetchEvent(event) { - const gatewayStartTime = Date.now() - let gatewayTimespan - let res - - function recordTimespans() { - const now = Date.now() - gatewayTimespan = now - gatewayStartTime - } - - try { - const { request } = event - const { method } = request - - if (method === 'OPTIONS') { - return handleOptions(request) - } - - const { originReq } = await resolveRequest(event, request) - - try { - const cacheKey = await getRequestCacheKey(originReq) - const originRes = await fetchCache({ - event, - cacheKey, - fetch: () => fetchRequest(event, { originReq }) - }) - - res = new Response(originRes.body, originRes) - recordTimespans() - - res.headers.set('x-proxy-response-time', `${gatewayTimespan}ms`) - - return res - } catch (err) { - console.error(err) - recordTimespans() - - res = new Response( - JSON.stringify({ - error: err.message, - type: err.type, - code: err.code - }), - { status: 500, headers: globalResHeaders } - ) - - return res - } - } catch (err) { - console.error(err) - - if (err.response) { - // TODO: make sure this response also has CORS globalResHeaders - return err.response - } else { - return new Response( - JSON.stringify({ - error: err.message, - type: err.type, - code: err.code - }), - { - status: 500, - headers: globalResHeaders - } - ) - } - } + const gatewayStartTime = Date.now() + let gatewayTimespan + let res + + function recordTimespans() { + const now = Date.now() + gatewayTimespan = now - gatewayStartTime + } + + try { + const { request } = event + const { method } = request + + if (method === 'OPTIONS') { + return handleOptions(request) + } + + const url = new URL(request.url) + + if (url.search.length < 0 || url.pathname === '/' || url.pathname === '') { + return new Response(null, { + status: 400, + + statusText: 'bad request' + }) + } + + const { originReq } = await resolveRequest(event, request) + + try { + const cacheKey = await getRequestCacheKey(originReq) + const originRes = await fetchCache({ + event, + cacheKey, + fetch: () => fetchRequest(event, { originReq }) + }) + + res = new Response(originRes.body, originRes) + recordTimespans() + + res.headers.set('x-proxy-response-time', `${gatewayTimespan}ms`) + + return res + } catch (err) { + console.error(err) + recordTimespans() + + res = new Response( + JSON.stringify({ + error: err.message, + type: err.type, + code: err.code + }), + { status: 500, headers: globalResHeaders } + ) + + return res + } + } catch (err) { + console.error(err) + + if (err.response) { + // TODO: make sure this response also has CORS globalResHeaders + return err.response + } else { + return new Response( + JSON.stringify({ + error: err.message, + type: err.type, + code: err.code + }), + { + status: 500, + headers: globalResHeaders + } + ) + } + } } |