«Невозможно прочитать свойство« pu sh »из неопределенного» при объединении действий S3 с обещаниями - PullRequest
1 голос
/ 09 апреля 2020

Я не могу понять это. Любая помощь приветствуется.

У меня есть лямбда, которая в основном копирует HTML файлы из одного блока S3 в другой блок S3, включая некоторые "magi c" (повторное использование частей других файлов HTML).

У меня было это и работает внутри узлов. 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, плюс в коде это выглядит ужасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...