import { DurableObject } from 'cloudflare:workers';
export class MyDurableObject extends DurableObject<Env> {
constructor(ctx: DurableObjectState, env: Env) {
super(ctx, env);
ctx.blockConcurrencyWhile(async () => {
await ctx.storage.transaction(async () => {
const version = await ctx.storage.get('migrationVersion');
if (version === 1) return;
ctx.storage.sql.exec(`
CREATE TABLE Configs (
key TEXT NOT NULL,
value TEXT NOT NULL,
PRIMARY KEY (key)
)
STRICT;
`);
ctx.storage.sql.exec(`INSERT INTO Configs (key, value) VALUES (?, ?);`, 'foo', 'bar');
await ctx.storage.put('migrationVersion', 1);
});
});
}
async sayHello(key: string): Promise<string> {
const { value } = this.ctx.storage.sql.exec(`SELECT value FROM Configs WHERE key = ?;`, key).one();
return `Hello, ${value}!`;
}
}
export default {
async fetch(request, env, ctx): Promise<Response> {
const url = new URL(request.url);
if (url.pathname !== '/hello-world') return new Response(null, { status: 404 });
let id: DurableObjectId = env.MY_DURABLE_OBJECT.idFromName('hello-world');
let stub = env.MY_DURABLE_OBJECT.get(id);
let greeting = await stub.sayHello('foo');
return new Response(greeting);
},
} satisfies ExportedHandler<Env>;
import { DurableObject } from 'cloudflare:workers';
export class MyDurableObject extends DurableObject<Env> {
constructor(ctx: DurableObjectState, env: Env) {
super(ctx, env);
ctx.blockConcurrencyWhile(async () => {
await ctx.storage.transaction(async () => {
const version = await ctx.storage.get('migrationVersion');
if (version === 1) return;
ctx.storage.sql.exec(`
CREATE TABLE Configs (
key TEXT NOT NULL,
value TEXT NOT NULL,
PRIMARY KEY (key)
)
STRICT;
`);
ctx.storage.sql.exec(`INSERT INTO Configs (key, value) VALUES (?, ?);`, 'foo', 'bar');
await ctx.storage.put('migrationVersion', 1);
});
});
}
async sayHello(key: string): Promise<string> {
const { value } = this.ctx.storage.sql.exec(`SELECT value FROM Configs WHERE key = ?;`, key).one();
return `Hello, ${value}!`;
}
}
export default {
async fetch(request, env, ctx): Promise<Response> {
const url = new URL(request.url);
if (url.pathname !== '/hello-world') return new Response(null, { status: 404 });
let id: DurableObjectId = env.MY_DURABLE_OBJECT.idFromName('hello-world');
let stub = env.MY_DURABLE_OBJECT.get(id);
let greeting = await stub.sayHello('foo');
return new Response(greeting);
},
} satisfies ExportedHandler<Env>;