Durable Objectのメモリ内状態
メモリ内で最後にアクセスされた場所を保存するDurable Objectを作成します
この例は、Durable Objectsが状態を持つことを示しています。つまり、メモリ内の状態はリクエスト間で保持されることができます。短い非アクティブ期間の後、Durable Objectは追い出され、すべてのメモリ内の状態は失われます。次のリクエストではオブジェクトが再構築されますが、前回のリクエストの都市を表示する代わりに、オブジェクトが再初期化されたことを示すメッセージが表示されます。アプリケーションの状態を追い出しから生き残らせる必要がある場合は、storage APIを使用して状態をストレージに書き込むか、データを他の場所に保存してください。
// Workerexport default { async fetch(request, env) { return await handleRequest(request, env); }}
async function handleRequest(request, env) { let id = env.LOCATION.idFromName("A"); let obj = env.LOCATION.get(id); // リモートDurable Objectにリクエストを転送します。 let resp = await obj.fetch(request); // クライアントに応答を返します。 return new Response(await resp.text());}
// Durable Objectexport class Location { constructor(state, env) { this.state = state; // コンストラクション時には提供する場所がありません。 // この値は、Durable Objectにアクセスする人々によって更新されます。 // Durable Objectがメモリから追い出されると、これがリセットされます。 this.location = null }
// クライアントからのHTTPリクエストを処理します。 async fetch(request) { let response = null
if (this.location == null) { response = new String(`これは最初のリクエストです。コンストラクタを呼び出したので、this.locationはnullでした。この.locationをあなたの都市に設定します: (${request.cf.city}). ページを再読み込みしてみてください。`); } else { response = new String(`Durable Objectはすでに読み込まれており、最近リクエストを処理したため、実行中です。
前の場所: ${this.location}新しい場所: ${request.cf.city}`); }
// 新しい場所を新しい都市に設定します。 this.location = request.cf.city; console.log(response); return new Response(response); }}