@unikvs/cloudflare-kv
Cloudflare KV binding にバイト列を保存する @unikvs/cloudflare-kv の使い方を説明します。
概要
@unikvs/cloudflare-kv は Cloudflare Workers の KV binding にバイト列を保存するストレージです。
このストレージは、すべてのキーに接頭辞を付与し、値をバイナリーセーフな ArrayBuffer としてそのまま put・get します。
nameはCloudflareKvです。isOpenは常にtrueです。open()・close()は中断の確認のみ行います。deleteは冪等で、存在しないキーも成功扱いにします。- ストリームの読み書きには対応していません。
インストールは次のコマンドで行います。
npm install @unikvs/cloudflare-kvpnpm add @unikvs/cloudflare-kvyarn add @unikvs/cloudflare-kvbun add @unikvs/cloudflare-kvnub add @unikvs/cloudflare-kvaube add @unikvs/cloudflare-kv使い方
CloudflareKv は IStorage を実装しています。UniKvs には persist() で渡します。
import { CloudflareKv } from "@unikvs/cloudflare-kv";
CloudflareKv
Cloudflare KV binding 上で動作するストレージです。
コンストラクターの引数は次のとおりです。
bindingKVNamespaceLike
注入する KV binding です。get・put・delete・list を持つオブジェクトを渡します。
KVNamespaceLikekeyPrefix?string
すべてのキーに付与する接頭辞です。
string"unikvs:"ttlSeconds?number
書き込み時に付与する有効期限 (秒) です。未指定なら無期限です。put の expirationTtl としてそのまま渡します。
number以下は、値を保存して読み戻す例です。
import { CloudflareKv } from "@unikvs/cloudflare-kv";
import * as unikvs from "unikvs";
const kvs = new unikvs.Builder<{
foo: unikvs.Value<Uint8Array>;
}>()
.persist(new CloudflareKv({ binding }))
.build();
await kvs.open();
await kvs.set("foo", new Uint8Array([0, 1, 2]));
const data = await kvs.get("foo");
console.log(data); // Uint8Array(3) [0, 1, 2]
await kvs.close();
データ型
| 操作 | 対応するデータ型 |
|---|---|
write・read |
バイト列 (Uint8Array<ArrayBuffer>) |
- バイト列のみを保存できます。文字列やオブジェクトはミドルウェアで変換してから渡してください。
- 値は
ArrayBufferとしてそのまま保存され、ビューのbyteOffsetは持ち越しません。 clearは接頭辞配下のキーをlistで列挙してから削除します。- ストリームの読み書きには対応していません。
エラー
このパッケージが投げるエラーは次のとおりです。
InvalidBindingError
意味
binding が get・put・delete・list を持つオブジェクトではないときに、構築時に投げます。
対処方法
KVNamespace binding か、同等の 4 メソッドを持つオブジェクトを渡します。
InvalidKeyPrefixError
意味
keyPrefix が文字列ではないときに、構築時に投げます。
対処方法
keyPrefix には文字列を指定します。
InvalidTtlSecondsError
意味
ttlSeconds が正の整数でも undefined でもないときに、構築時に投げます。
対処方法
ttlSeconds には正の整数を指定するか、未指定にします。
KeyNotFoundError
意味
指定したキーが存在しないときに read が投げます。@unikvs/core の共通エラーです。
対処方法
exists で確認してから読み出します。
例
以下は、KeyNotFoundError を捕捉する例です。
import { KeyNotFoundError } from "@unikvs/cloudflare-kv";
try {
const data = await kvs.get("missing-key");
} catch (ex) {
if (ex instanceof KeyNotFoundError) {
console.log("キーが見つかりません");
} else {
throw ex;
}
}