javascript - 使用承诺链接 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 的选项,而且它在代码中看起来超级难看。
解决方案
推荐阅读
- css - 导航时悬停动画
- oop - 凝聚力与单一职责
- c# - 我是否必须编写 API 才能与亚马逊 MWS 交互?
- javascript - 使用 JavaScript 和 CSS 的绝对定位圆的弯曲/曲线集
- android - 使用 react-native-vector-icons 图标未显示在 android 屏幕上
- python - Python - 初始化父类
- git - git log 仅显示仅在合并到 master 后修改的文件
- javascript - 使用 onBoundsChanged 响应谷歌地图重新渲染问题
- html - 添加过渡图像
- php - PHP Cli - json 编码一个数组并传递给 STDIN