Неожиданная ошибка токена s3 на AWS Lambda Node 12.X

#javascript #node.js #amazon-web-services #amazon-s3 #aws-lambda

#javascript #node.js #amazon-веб-сервисы #amazon-s3 #aws-lambda

Вопрос:

Я использую версию узла 12.x для написания моей лямбда-функции. Вот ошибка синтаксического анализа, которую я получаю. В чем может быть причина?Ошибка синтаксического анализа: неожиданный токен S3

Обновить

 const im = require("imagemagick");
const fs = require("fs");
const os = require("os");
const uuidv4 = require("uuid/v4");
const {promisify} = require("util");
const AWS = require('aws-sdk');

const resizeAsync = promisify(im.resize)
const readFileAsync = promisify(fs.readFile)
const unlinkAsync = promisify(fs.unlink)


AWS.config.update({region: 'ap-south-1'})
const s3 = new AWS.S3();

exports.handler = async (event) => {
    let filesProcessed = event.Records.map((record) => {
        let bucket = record.s3.bucket.name;
        let filename = record.s3.object.key;
    //Fetch filename from S3
    var params = {
        Bucket: bucket,
        Key: filename
    };
    //let inputData = await s3.getObject(params).promise()
    let inputData = await s3.getObject(params).promise();
    //Resize the file
    let tempFile = os.tmpdir()   '/'   uuidv4()   '.jpg';
    let resizeArgs = {
        srcData: inputData.Body,
        dstPath: tempFile,
        width: 150
    };
    await resizeAsync(resizeArgs)
    //Read the resized File
    let resizedData = await readFileAsync(tempFile)

    //Upload the resized file to S3
    let targetFilename = filename.substring(0, filename.lastIndexOf('.')   '-small.jpg')
    var params = {
        Bucket: bucket   '-dest',
        Key: targetFilename,
        Body: new Buffer(resizedData),
        ContentType: 'image/jpeg'
    }
    await s3.putObject(params).promise();
    return await unlinkAsync(tempFile)
})

await Promise.all(filesProcessed)
return "done"
  

}

Здесь тот же код. Я получаю неожиданную ошибку токена S3 при наведении красной метки (показано на изображении)

Комментарии:

1. Вы уверены в вопросе? Я предполагаю, что возврат не в строковом формате и, следовательно, проблема. Возможно, если вы дадите нам какой-нибудь код вместо скриншота, это поможет нам лучше понять.

2. конечно. Я обновлю код

3. @rey обновлено. пожалуйста, проверьте

Ответ №1:

Что вы можете сделать, это объявить inputData, как показано ниже, и инициализировать его с помощью ответа от GetObject .

 let inputData;    
var params = {
    Bucket: "examplebucket", 
    Key: "HappyFace.jpg"
};
s3.getObject(params, function(err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else     inputData = data;           // successful response
});
  

Для получения дополнительной информации вы можете обратиться сюда

Комментарии:

1. Я больше не вижу ошибки, но я также не получаю никаких выходных данных. Я поместил console.log() внутрь if и else . А также одна при запуске функции обратного вызова. Ни один из них не отображается в CloudWatch

2. Происходит ли событие? Проверьте имя файла в теле события один раз. Попробуйте обновить вышеуказанное в цикле if, если имя файла существует.

3. Я попытался реализовать указанный вами способ еще раз, и это сработало. Спасибо