コンテンツにスキップ

Durable Objectのメモリ内状態

メモリ内で最後にアクセスされた場所を保存するDurable Objectを作成します

この例は、Durable Objectsが状態を持つことを示しています。つまり、メモリ内の状態はリクエスト間で保持されることができます。短い非アクティブ期間の後、Durable Objectは追い出され、すべてのメモリ内の状態は失われます。次のリクエストではオブジェクトが再構築されますが、前回のリクエストの都市を表示する代わりに、オブジェクトが再初期化されたことを示すメッセージが表示されます。アプリケーションの状態を追い出しから生き残らせる必要がある場合は、storage APIを使用して状態をストレージに書き込むか、データを他の場所に保存してください。

// Worker
export 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 Object
export 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);
}
}