aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2024-01-22 09:04:03 -0800
committerFuwn <[email protected]>2024-01-22 09:04:03 -0800
commit792b5e433fc742f3ecf0ad05e3eaf60e6a7452f0 (patch)
tree86eae019025da7c098b0dce2af8651e3342caa67
parentfix(wrangler): configuration (diff)
downloadcf-image-proxy-792b5e433fc742f3ecf0ad05e3eaf60e6a7452f0.tar.xz
cf-image-proxy-792b5e433fc742f3ecf0ad05e3eaf60e6a7452f0.zip
fix(index.js): handle errors
-rw-r--r--src/index.js148
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
+ }
+ )
+ }
+ }
}