首页 > 解决方案 > 使用承诺链接 S3 操作时,“无法读取未定义的属性‘推送’”

问题描述

我想不通这个。任何帮助表示赞赏。

我有一个 lambda,它基本上将 HTML 文件从一个 S3 存储桶复制到另一个 S3 存储桶,包括一些“魔术”(重用其他 HTML 文件的一部分)。

我在nodes.js 10中启动并运行了它

exports.handler = async (event, context, callback) => { }

带有回调。切换到 node.js 12

exports.handler = async (event) => { }

我不得不从回调切换到承诺。

生成的代码适用于 60% 的情况。

exports.handler = async (event) => {
for (var record of event.Records) {
    if(record.s3.object.key.indexOf(".") != -1){
        if (record.s3.object.key.localeCompare("website/") != 0) {
            const objectCopied = await s3.putObject( { Body: (await generateHTML( (await s3.getObject({ Bucket: record.s3.bucket.name, Key: record.s3.object.key }).promise()).Body.toString('utf-8'), record.s3.bucket.name )), Bucket: DestBucket, Key: record.s3.object.key.slice("website/".length), ACL: 'public-read',  ContentType: 'text/html'}).promise();
        }           
    }
}    
return 0;
};

在另外 40% 中,我收到此错误:

Response:
{
  "errorType": "TypeError",
  "errorMessage": "Cannot read property 'push' of undefined",
  "trace": [
    "TypeError: Cannot read property 'push' of undefined",
    "    at Request.HTTP_DATA (/var/runtime/node_modules/aws-sdk/lib/event_listeners.js:389:35)",
    "    at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:106:20)",
    "    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:78:10)",
    "    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:683:14)",
    "    at IncomingMessage.onReadable (/var/runtime/node_modules/aws-sdk/lib/event_listeners.js:289:32)",
    "    at IncomingMessage.emit (events.js:311:20)",
    "    at IncomingMessage.EventEmitter.emit (domain.js:482:12)",
    "    at emitReadable_ (_stream_readable.js:562:12)",
    "    at onEofChunk (_stream_readable.js:540:5)",
    "    at readableAddChunk (_stream_readable.js:242:5)"
  ]
}

我不知道,我在这里做错了什么。请帮忙!

关于“为什么”的再一句话:我的研究提出,AWS 在链接承诺方面存在问题,但我发现建议的解决方案是使用回调。据我所知,这不是 nodejs 12 的选项,而且它在代码中看起来超级难看。

标签: javascriptnode.jsamazon-web-servicesamazon-s3aws-lambda

解决方案


推荐阅读