メインコンテンツまでスキップ

Momento Node.js SDKで設定とエラー処理を管理する方法

以下のコードは CacheClient を作成する最も簡単な方法を示している:

const cacheClient = await CacheClient.create({
credentialProvider: CredentialProvider.fromEnvVar('MOMENTO_API_KEY'),
defaultTtlSeconds: 60,
});

しかし、Configurationオブジェクトを渡して、動作をカスタマイズすることもできる。

Momento は Configurations モジュールに、InRegion (同じ AWS リージョン内からのサーバーサイド接続に適したタイムアウトと接続カウントを設定したもの) (同じ AWS リージョン内からのサーバーサイドの接続に適したタイムアウトと接続カウントで構成されています)、 や Lambda (AWS Lambda 環境で使用するためにチューニングされている) などがあります。以下は Lambda の設定方法です:

const cacheClient = await CacheClient.create({
configuration: Configurations.Lambda.latest(),
credentialProvider: CredentialProvider.fromEnvVar('MOMENTO_API_KEY'),
defaultTtlSeconds: 60,
});
ヒント

この設定を省略すると、Momento はデフォルトで Laptop 設定を使用します。この設定はタイムアウトが緩やかで タイムアウトが緩やかで、開発や遅延の大きい環境に適しています。(サーバーサイドでの使用はお勧めしません)。

Configurationオブジェクトの詳細については、SDK Configuration Objectsを参照してください。

デフォルトでは、CacheClient のエラーは、例外をスローするのではなく、呼び出しの返り値の一部として開発者に表示されます。 例外をスローするのではなく、呼び出しの戻り値の一部として開発者に表示されます。これにより、コードを書いているときにエラーがより見やすくなり、IDE がより役立つようになります。

以下は get 呼び出しのエラーをチェックする方法の例です:

const result = await cacheClient.get('test-cache', 'test-key');
if (result instanceof CacheGet.Hit) {
console.log(`Retrieved value for key 'test-key': ${result.valueString()}`);
} else if (result instanceof CacheGet.Miss) {
console.log("Key 'test-key' was not found in cache 'test-cache'");
} else if (result instanceof CacheGet.Error) {
throw new Error(
`An error occurred while attempting to get key 'test-key' from cache 'test-cache': ${result.errorCode()}: ${result.toString()}`
);
}

ただし、例外を発生させたい場合は、CacheClient を設定して例外を発生させることができます:

const cacheClient = await CacheClient.create({
configuration: Configurations.Lambda.latest().withThrowOnErrors(true),
credentialProvider: CredentialProvider.fromEnvVar('MOMENTO_API_KEY'),
defaultTtlSeconds: 60,
});

この設定では、エラーが発生すると SdkError のインスタンスがスローされます。これをキャッチして .errorCode()`メソッドを使用して、発生したエラーを特定できます:

try {
const result = (await cacheClient.get('test-cache', 'test-key')).value();
if (result !== undefined) {
console.log(`Retrieved value for key 'test-key': ${result}`);
} else {
console.log("Key 'test-key' was not found in cache 'test-cache'");
}
} catch (e) {
const momentoError = e as SdkError;
if (momentoError.errorCode() === MomentoErrorCode.LIMIT_EXCEEDED_ERROR) {
console.log('Request rate limit exceeded, may need to request a limit increase!');
} else {
throw new Error(
`An error occurred while attempting to get key 'test-key' from cache 'test-cache': ${momentoError.errorCode()}: ${momentoError.toString()}`
);
}
}

Momentoのエラー処理については、SDK Error Handlingを参照してください。