Better redirects handling

This commit is contained in:
Alexander Borsuk 2021-05-31 09:32:14 +02:00
parent b0cd227f25
commit cfa661f84f

View file

@ -1,7 +1,7 @@
import { getAssetFromKV, mapRequestToAsset } from '@cloudflare/kv-asset-handler';
import { onGe0Decode } from './ge0';
const NOT_FOUND_REDIRECT_URL = 'https://organicmaps.app/';
const NOT_FOUND_REDIRECT_URL = 'https://organicmaps.app';
const GE0_TEMPLATE_URL = '/ge0.html';
addEventListener('fetch', (event) => {
@ -12,12 +12,16 @@ addEventListener('fetch', (event) => {
event.respondWith(new Response(e.message || e.toString(), { status: 500 }));
} else {
// In case of unexpected errors, always redirect to the default url.
event.respondWith(onRedirect(NOT_FOUND_REDIRECT_URL));
event.respondWith(Response.redirect(NOT_FOUND_REDIRECT_URL, 302));
}
}
});
async function handleFetchEvent(event: FetchEvent) {
const { hostname, pathname } = new URL(event.request.url);
if (hostname === 'omaps.app' && pathname === '/')
return Response.redirect(NOT_FOUND_REDIRECT_URL, 301);
// See https://github.com/cloudflare/kv-asset-handler#optional-arguments
const getAssetOptions: {
cacheControl?: { bypassCache: boolean };
@ -34,10 +38,8 @@ async function handleFetchEvent(event: FetchEvent) {
return await getAssetFromKV(event, getAssetOptions);
} catch (_) { }
// No static resource were found, try to handle a specific dynamic request.
const { pathname } = new URL(event.request.url);
// Filter empty pathname elements.
const params = pathname.split('/').filter(Boolean);
if (params.length === 0) return onRedirect(NOT_FOUND_REDIRECT_URL);
getAssetOptions.mapRequestToAsset = (request: Request) => {
const url = new URL(request.url);
@ -48,7 +50,3 @@ async function handleFetchEvent(event: FetchEvent) {
const ge0HtmlTemplate = await resp.text();
return onGe0Decode(ge0HtmlTemplate, params[0], params.length >= 2 ? params[1] : undefined);
}
function onRedirect(url: string) {
return Response.redirect(url, 301);
}