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');
switch (result.type) {
case CacheGetResponse.Hit:
console.log(`Retrieved value for key 'test-key': ${result.valueString()}`);
break;
case CacheGetResponse.Miss:
console.log("Key 'test-key' was not found in cache 'test-cache'");
break;
case CacheGetResponse.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を参照してください。