working online D1 tutorial

This commit is contained in:
polv committed 2026-08-30 19:15:59 +07:00
1 parent 1079a1a481
commit 91623834d6
5 files changed
+50 -36

No files matched your search

+3
View File
@@ -0,0 +1,3 @@
DROP TABLE IF EXISTS Customers;
CREATE TABLE IF NOT EXISTS Customers (CustomerId INTEGER PRIMARY KEY, CompanyName TEXT, ContactName TEXT);
INSERT INTO Customers (CustomerID, CompanyName, ContactName) VALUES (1, 'Alfreds Futterkiste', 'Maria Anders'), (4, 'Around the Horn', 'Thomas Hardy'), (11, 'Bs Beverages', 'Victoria Ashworth'), (13, 'Bs Beverages', 'Random Name');
+12 -5
View File
@@ -1,4 +1,4 @@
import { DurableObject } from "cloudflare:workers"; import { DurableObject } from 'cloudflare:workers';
/** /**
* Welcome to Cloudflare Workers! This is your first Durable Objects application. * Welcome to Cloudflare Workers! This is your first Durable Objects application.
@@ -13,7 +13,6 @@ import { DurableObject } from "cloudflare:workers";
* Learn more at https://developers.cloudflare.com/durable-objects * Learn more at https://developers.cloudflare.com/durable-objects
*/ */
/** A Durable Object's behavior is defined in an exported Javascript class */ /** A Durable Object's behavior is defined in an exported Javascript class */
export class MyDurableObject extends DurableObject { export class MyDurableObject extends DurableObject {
/** /**
@@ -54,12 +53,20 @@ export default {
// //
// Requests from all Workers to the Durable Object instance named "foo" // Requests from all Workers to the Durable Object instance named "foo"
// will go to a single remote Durable Object instance. // will go to a single remote Durable Object instance.
const stub = env.MY_DURABLE_OBJECT.getByName("foo"); const stub = env.MY_DURABLE_OBJECT.getByName('foo');
// Call the `sayHello()` RPC method on the stub to invoke the method on // Call the `sayHello()` RPC method on the stub to invoke the method on
// the remote Durable Object instance. // the remote Durable Object instance.
const greeting = await stub.sayHello("world"); // const greeting = await stub.sayHello("world");
return new Response(greeting); const { pathname } = new URL(request.url);
if (pathname === '/api/beverages') {
// If you did not use `DB` as your binding name, change it here
const { results } = await env.prod_d1_tutorial.prepare('SELECT * FROM Customers WHERE CompanyName = ?').bind('Bs Beverages').run();
return Response.json(results);
}
return new Response('Call /api/beverages to see everyone who works at Bs Beverages');
}, },
} satisfies ExportedHandler<Env>; } satisfies ExportedHandler<Env>;
+16 -18
View File
@@ -2,43 +2,41 @@
"compilerOptions": { "compilerOptions": {
/* Visit https://aka.ms/tsconfig.json to read more about this file */ /* Visit https://aka.ms/tsconfig.json to read more about this file */
/* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
"target": "es2024", "target": "es2024",
/* Specify a set of bundled library declaration files that describe the target runtime environment. */ /* Specify a set of bundled library declaration files that describe the target runtime environment. */
"lib": ["es2024"], "lib": ["es2024"],
/* Specify what JSX code is generated. */ /* Specify what JSX code is generated. */
"jsx": "react-jsx", "jsx": "react-jsx",
/* Specify what module code is generated. */ /* Specify what module code is generated. */
"module": "es2022", "module": "es2022",
/* Specify how TypeScript looks up a file from a given module specifier. */ /* Specify how TypeScript looks up a file from a given module specifier. */
"moduleResolution": "node", "moduleResolution": "node",
/* Enable importing .json files */ /* Enable importing .json files */
"resolveJsonModule": true, "resolveJsonModule": true,
"ignoreDeprecations": "6.0",
/* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */
"allowJs": true, "allowJs": true,
/* Enable error reporting in type-checked JavaScript files. */ /* Enable error reporting in type-checked JavaScript files. */
"checkJs": false, "checkJs": false,
/* Disable emitting files from a compilation. */ /* Disable emitting files from a compilation. */
"noEmit": true, "noEmit": true,
/* Ensure that each file can be safely transpiled without relying on other imports. */ /* Ensure that each file can be safely transpiled without relying on other imports. */
"isolatedModules": true, "isolatedModules": true,
/* Allow 'import x from y' when a module doesn't have a default export. */ /* Allow 'import x from y' when a module doesn't have a default export. */
"allowSyntheticDefaultImports": true, "allowSyntheticDefaultImports": true,
/* Ensure that casing is correct in imports. */ /* Ensure that casing is correct in imports. */
"forceConsistentCasingInFileNames": true, "forceConsistentCasingInFileNames": true,
/* Enable all strict type-checking options. */ /* Enable all strict type-checking options. */
"strict": true, "strict": true,
/* Skip type checking all .d.ts files. */ /* Skip type checking all .d.ts files. */
"skipLibCheck": true, "skipLibCheck": true,
"types": [ "types": ["./worker-configuration.d.ts", "node"]
"./worker-configuration.d.ts",
"node"
]
} }
} }
+2 -1
View File
@@ -1,7 +1,8 @@
/* eslint-disable */ /* eslint-disable */
// Generated by Wrangler by running `wrangler types` (hash: 03fd955e5460f9d8b4d609f5cc72b4fc) // Generated by Wrangler by running `wrangler types` (hash: ed10d7e0f72eca34d1628dd7a42b0e58)
// Runtime types generated with workerd@1.20260828.1 2026-08-25 // Runtime types generated with workerd@1.20260828.1 2026-08-25
interface __BaseEnv_Env { interface __BaseEnv_Env {
prod_d1_tutorial: D1Database;
MY_DURABLE_OBJECT: DurableObjectNamespace<import("./src/index").MyDurableObject>; MY_DURABLE_OBJECT: DurableObjectNamespace<import("./src/index").MyDurableObject>;
} }
declare namespace Cloudflare { declare namespace Cloudflare {
+17 -12
View File
@@ -9,28 +9,33 @@
"compatibility_date": "2026-08-25", "compatibility_date": "2026-08-25",
"migrations": [ "migrations": [
{ {
"new_sqlite_classes": [ "new_sqlite_classes": ["MyDurableObject"],
"MyDurableObject" "tag": "v1",
], },
"tag": "v1"
}
], ],
"assets": { "assets": {
// The path to the directory containing the `index.html` file to be served at `/` // The path to the directory containing the `index.html` file to be served at `/`
"directory": "./public" "directory": "./public",
}, },
"durable_objects": { "durable_objects": {
"bindings": [ "bindings": [
{ {
"class_name": "MyDurableObject", "class_name": "MyDurableObject",
"name": "MY_DURABLE_OBJECT" "name": "MY_DURABLE_OBJECT",
} },
] ],
}, },
"observability": { "observability": {
"enabled": true "enabled": true,
}, },
"upload_source_maps": true "upload_source_maps": true,
"d1_databases": [
{
"binding": "prod_d1_tutorial",
"database_name": "prod-d1-tutorial",
"database_id": "1e595d69-ec95-4eef-a2ef-57ac6ada1973",
},
],
/** /**
* Smart Placement * Smart Placement
* https://developers.cloudflare.com/workers/configuration/smart-placement/#smart-placement * https://developers.cloudflare.com/workers/configuration/smart-placement/#smart-placement
@@ -54,4 +59,4 @@
* https://developers.cloudflare.com/workers/wrangler/configuration/#service-bindings * https://developers.cloudflare.com/workers/wrangler/configuration/#service-bindings
*/ */
// "services": [ { "binding": "MY_SERVICE", "service": "my-service" } ] // "services": [ { "binding": "MY_SERVICE", "service": "my-service" } ]
} }