Last active
June 20, 2022 02:52
-
-
Save rxgx/7e1b24de5936ff1b2b815a3d9cc3897a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const AWS = require('aws-sdk'); | |
| const client = new AWS.SecretsManager({}); | |
| // Call the AWS API and return a Promise | |
| function getAwsSecret(secretName) { | |
| return client.getSecretValue({ SecretId: secretName }).promise(); | |
| } | |
| // Create a async function to use the Promise | |
| // Top level await is a proposal | |
| async function getAwsSecretAsync (secretName) { | |
| var error; | |
| var response = await getAwsSecret(secretName).catch(err => (error = err)); | |
| return [error, response]; | |
| } | |
| // Call the async function and return NodeJS callback style | |
| module.exports = function asyncExample () { | |
| var [error, secret] = getAwsSecretAsync('dev/MySecret/MyService'); | |
| if (error) { | |
| // Trigger an error and halt | |
| console.error(error); | |
| return; | |
| } | |
| // Use the result | |
| console.debug(secret); | |
| } |
Author
This code works :
const clientsecrets = new SecretsManager( { region: 'eu-west-3' } ); const getMySecret = async ( SecretId ) => { const s = await clientsecrets.getSecretValue( { SecretId } ).promise(); return s.SecretString; }; const secret = await getMySecret( 'STRIPE_PUBLISHABLE_TEST_KEY' ); console.log( 'secret : ', secret );
I'm getting this error
SyntaxError: await is only valid in async functions and the top level bodies of modules
This code works :
const clientsecrets = new SecretsManager( { region: 'eu-west-3' } ); const getMySecret = async ( SecretId ) => { const s = await clientsecrets.getSecretValue( { SecretId } ).promise(); return s.SecretString; }; const secret = await getMySecret( 'STRIPE_PUBLISHABLE_TEST_KEY' ); console.log( 'secret : ', secret );I'm getting this error SyntaxError: await is only valid in async functions and the top-level bodies of modules
const secret = await getMySecret( 'STRIPE_PUBLISHABLE_TEST_KEY' );
console.log( 'secret : ', secret );This block of code needs to be wrapped in an async function. Node.js doesn't, yet, natively support calling await outside of an async unlike Deno.
To fix your issue, you can do this:
// Either
// using an IIFE (Immediately-invoke Function Expression)
(async () => {
const secret = await getMySecret( 'STRIPE_PUBLISHABLE_TEST_KEY' );
console.log( 'secret : ', secret );
})();
// or just use a Promise expression
getMySecret
.then((secret) => console.log( 'secret : ', secret ))
.catch((error) => console.error(error));
Author
Top level async/await is now available in Node.js LTS (v16.15.0 as of now).
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
scould benullorundefinedifclientsecrets.getSecretValuetakes too long or something happens on AWS servers.