I'm developing a Cloudflare Workers application using Hono JS and encountering an issue where I'm unable to access FetchEvent
within the Hono context. The application works fine with itty router and the default Cloudflare worker setup, but with Hono, I'm facing difficulties.
Here's a snippet of my index.js
:
const app = new Hono();
app.get('/backgroundsounds', async (c) => {
const event = c.event
console.log("Event is", event);
return await handleBackgroundSoundsGetAll(c);
});
export default app;
And here is my handleBackgroundSoundsGetAll
function:
export const handleBackgroundSoundsGetAll = async (c) => {
const { MY_BUCKET } = c.env;
const request = c.req; // Access the request from the Hono context
const cacheUrl = new URL(request.url);
const cacheKey = new Request(cacheUrl.toString(), { method: 'GET' });
const cache = caches.default;
const fileName = "backgroundsounds.json";
console.log("Checking cache for key", cacheKey);
let response = await cache.match(cacheKey);
console.log("Cache match result", response);
// Access R2 bucket from environment bindings
const backgroundSoundsJson = c.env.MY_BUCKET.get(fileName);
console.log("Fetching object and ETag from R2 bucket in the background");
if (response) {
console.log("Cache hit, serving response");
if (c.event) {
c.event.waitUntil(...)
}
return response;
} else {
// Additional handling for cache miss
}
};
I'm getting an error saying This context has no FetchEvent
. I'm not sure what I'm missing or doing wrong. The same logic works when I use itty router or the standard Cloudflare worker setup.
Has anyone encountered a similar issue with Hono on Cloudflare Workers or can point out what might be going wrong with my implementation?
Any insights or suggestions would be greatly appreciated!
You're using Module Workers (
export default
), rather than Service Workers, so there is no moreaddEventListener
or events.You will have
c.req
,c.env
andc.executionCtx
instead.c.req
is aRequest
object equivalent toevent.request
.c.env
contains your bindings, which are no-longer globals but instead on theenv
object.c.executionCtx
containswaitUntil()
andpassThroughOnException()
which are equivalent to the methods that would have been on theevent
object.Take a look at Hono's Cloudflare Workers guide and the Context API reference.