detailed error handling for cloudflare worker

This commit is contained in:
Brandon Liu
2022-07-21 18:51:56 +08:00
parent fc5e366bd2
commit a6a0683947

View File

@@ -10,6 +10,12 @@ interface CacheEntry {
buffer: DataView;
}
class KeyNotFoundError extends Error {
constructor(message: string) {
super(message);
}
}
export class LRUCache {
entries: Map<string, CacheEntry>;
counter: number;
@@ -35,6 +41,9 @@ export class LRUCache {
let resp = await bucket.get(key, {
range: { offset: offset, length: length },
});
if (!resp) {
throw new KeyNotFoundError("Key not found");
}
let a = await (resp as R2ObjectBody).arrayBuffer();
let d = new DataView(a);
@@ -110,12 +119,20 @@ export default {
let source = new TempSource();
let p = new PMTiles(source);
try {
let metadata = await p.metadata();
if (z < metadata.minzoom || z > metadata.maxzoom) {
return new Response("Tile not found", { status: 404 });
}
let entry = await p.getZxy(z, x, y);
if (entry) {
let tile = await env.BUCKET.get(pmtiles_path(env.PMTILES_PATH, name), {
let tile = await env.BUCKET.get(
pmtiles_path(env.PMTILES_PATH, name),
{
range: { offset: entry.offset, length: entry.length },
});
}
);
let headers = new Headers();
headers.set("Access-Control-Allow-Origin", "*");
@@ -130,8 +147,17 @@ export default {
headers: headers,
encodeBody: "manual",
} as any);
} else {
return new Response(undefined, { status: 204 });
}
} catch (e) {
if (e instanceof KeyNotFoundError) {
return new Response("Archive not found", { status: 404 });
} else {
throw e;
}
}
return new Response("Not Found");
}
return new Response("Invalid tile URL", { status: 400 });
},
};