如何使用 JavaScript 从 S3 缓冲区数据中获取 HTML 模板文件?

How to use JavaScript to get an HTML template file out of S3 buffer data?

我有一个 HTML 文件加载到 S3 存储桶中。此文件旨在用作电子邮件正文的模板。

我使用了这个问题 (Read file from aws s3 bucket using node fs) 的答案之一来帮助我从存储桶中取出文件。现在看来我有缓冲区数据需要转换回 HTML,或者它的字符串版本也可以。到目前为止我尝试过的方法都没有用...

这是我获取模板的代码:

async getEmailTemplate() {
    const s3 = new AWS.S3({ apiVersion: '2006-03-01' });
    const params = {
      Bucket: 'myBucket',
      Key: 'templates/email.html',
    };
    const template = await s3.getObject(params).promise();
    return template;
}

当我记录 "template" returns 的数据时,它看起来像这样...我需要像 template.body.toString('latin1')...

console.log src/services/tests/unit/Controller.test.js:266
    {
      AcceptRanges: 'bytes',
      LastModified: 2020-05-28T19:36:23.000Z,
      ContentLength: 22745,
      ETag: '"1bcc123ba55b5b878109436c1274b94b"',
      ContentType: 'text/html',
      Metadata: {},
      Body: <Buffer 3c 21 44 4f 43 54 59 50 45 20 68 74 6d 6c 3e 0a 3c 68 74 6d 6c 20 78 6d 6c 6e 73 3a 76 3d 22 75 72 6e 3a 73 63 68 65 6d 61 73 2d 6d 69 63 72 6f 73 6f ... 22695 more bytes>
    }

如果有所不同,模板包含看起来像 ${data.firstName} 的 js 模板文字。目前,当模板被硬编码在 javascript 文件中并用 `` 包围时,电子邮件会正确填充和发送。但我正在尝试更新代码以改为从外部来源提取模板。

感谢您花时间阅读我的问题...有人对我有什么建议吗? :)

如果您将 "body" 更改为 "Body" 它应该可以工作,这里有一些与您的代码几乎相同并且工作正常的旧代码:

 let { Body } = await s3.getObject(params).promise();
 return Body.toString(encoding)