0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cloudflare WorkersからKVに接続し、CRUD処理を実施する

Last updated at Posted at 2024-08-03

はじめに

前回までの記事の続きです。CloudflareでデプロイしたアプリケーションからDBに接続し、CRUD処理を実現します。DBはKVを利用します。

準備

cloudflareのKVより、名前空間を作成します。今回は「mydb」という名前で作成しました。
スクリーンショット 2024-08-03 20.58.42.png

image.png

名前空間のIDが表示されます。この値は後ほど利用するため、メモし✍️ておいてください。

プログラム実装

src/index.ts
import { Hono } from "hono";

const app = new Hono<{ Bindings: { mydb: KVNamespace } }>();

// POSTリクエストでキーと値を設定
app.post("/set", async (c) => {
	const kv = c.env.mydb;
	if (!kv) {
		return c.json({ error: "KV namespace is not bound" }, 500);
	}

	const data = await c.req.json();
	const { key, value } = data;

	if (!key || !value) {
		return c.json({ error: "Key and value are required" }, 400);
	}

	// 値を文字列に変換して保存
	await kv.put(key, JSON.stringify(value));
	return c.text("Value set!");
});

// GETリクエストでキーの値を取得
app.get("/get/:key", async (c) => {
	const kv = c.env.mydb;
	if (!kv) {
		return c.json({ error: "KV namespace is not bound" }, 500);
	}

	// URLパラメータからkeyを取得
	const key = c.req.param("key");
	const value = await kv.get(key);

	if (!value) {
		return c.json({ error: "Key not found" }, 404);
	}

	return c.json({ key, value: JSON.parse(value) });
});

// GETリクエストでキーのリストと値を取得
app.get("/list", async (c) => {
	const kv = c.env.mydb;
	if (!kv) {
		return c.json({ error: "KV namespace is not bound" }, 500);
	}

	const { keys } = await kv.list();
	const results = [];

	for (const { name } of keys) {
		const value = await kv.get(name);
		if (value) {
			results.push({ key: name, value: JSON.parse(value) });
		}
	}

	return c.json(results);
});

// ホームエンドポイント
app.get("/", (c) => {
	return c.text("Hello Hono!");
});

export default app;
wrangler.toml
#:schema node_modules/wrangler/config-schema.json
name = "XXXXXXXX"
main = "src/index.ts"
compatibility_date = "2024-07-29"

[dev]
port=4300

[[kv_namespaces]]
binding = "mydb"
id = "XXXXXXXXXXXX" ←先ほど取得kvのIDを設定します。

ローカル環境で実行確認

APIを叩きます。まずはデータの設定から実施します。

データの作成

スクリーンショット 2024-08-03 21.03.35.png
→実行後はjsonデータとして保存されています。

スクリーンショット 2024-08-03 21.06.24.png

データ一覧の取得

GET:http://localhost:4300/list

スクリーンショット 2024-08-03 21.09.19.png
:::note info
今は1件のみしか登録していないため、1件のみ取得されています。
:::

データのID指定での1件取得

GET http://localhost:4300/get/myKey

スクリーンショット 2024-08-03 21.10.47.png

## サーバへのデプロイ

~/develop/cloudflare_api/young-moon-ae78 (master)$ npm run deploy

> deploy
> wrangler deploy --minify


 ⛅️ wrangler 3.68.0

## サーバで実行
ローカル環境と同様に実行します。
実際にCloudflareのサーバ上にデータが登録されているかを確認します。

image.png

できていそうですね!!登録も取得も問題なく実行できそうです!!!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?