workerentrypoint and exportedfetchhandler

A workerentrypoint cannot be used as the main fetch handler correct? the reason i ask because every example of an rpc workerentrypoint i've seen includes a dummy fetch usually with a response 404. just wondering if instead of proxying directly to the rpc servicebinding fetch i could have it handle all incoming fetch?
1 Reply
KT
KT6mo ago
import {WorkerEntrypoint} from "cloudflare:workers";
import {Hono} from "hono";

type CloudflareEnv = {
MQ: Queue
}

export default class SimpleService extends WorkerEntrypoint<CloudflareEnv> {
fetch(request: Request): Response | Promise<Response> {
const app = new Hono<{Bindings: CloudflareEnv}>()
app.get('/', async (c) => c.json({"msg": "Hola!"}))
app.get('/ping', async (c) => c.json({ "msg": await this.ping() }))
app.post('/queue', async (c) => {
let msg = c.req.query('msg')
if(!msg) msg = "empty msg"
await c.env.MQ.send(msg)
return c.json({ "msg": `msg '${msg}' sent!` })
})
return app.fetch(request, this.env, this.ctx)
}

async queue(batch: MessageBatch): Promise<void> {
console.log(`received new msg from ${batch.queue}`)
batch.ackAll()
}

async scheduled(controller:ScheduledController): Promise<void> {
console.log("scheduled event: ", controller.cron)
}

async ping() {
return Promise.resolve("pong")
}
}
import {WorkerEntrypoint} from "cloudflare:workers";
import {Hono} from "hono";

type CloudflareEnv = {
MQ: Queue
}

export default class SimpleService extends WorkerEntrypoint<CloudflareEnv> {
fetch(request: Request): Response | Promise<Response> {
const app = new Hono<{Bindings: CloudflareEnv}>()
app.get('/', async (c) => c.json({"msg": "Hola!"}))
app.get('/ping', async (c) => c.json({ "msg": await this.ping() }))
app.post('/queue', async (c) => {
let msg = c.req.query('msg')
if(!msg) msg = "empty msg"
await c.env.MQ.send(msg)
return c.json({ "msg": `msg '${msg}' sent!` })
})
return app.fetch(request, this.env, this.ctx)
}

async queue(batch: MessageBatch): Promise<void> {
console.log(`received new msg from ${batch.queue}`)
batch.ackAll()
}

async scheduled(controller:ScheduledController): Promise<void> {
console.log("scheduled event: ", controller.cron)
}

async ping() {
return Promise.resolve("pong")
}
}
i think RPC workerentrypoint is just a plain worker with enhanced RPC ability. the code above can work well.

Did you find this page helpful?