【问题标题】:Unexpected Token s3 error on AWS Lambda Node 12.XAWS Lambda 节点 12.X 上出现意外的令牌 s3 错误
【发布时间】:2021-01-28 13:53:23
【问题描述】:

我正在使用 Node 12.x 版本来编写我的 Lambda 函数。这是我得到的解析错误。可能是什么原因?

更新

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"

}

这是相同的代码。悬停红色标记时出现 Unexpected token S3 错误(如图所示)

【问题讨论】:

  • 您确定这个问题吗?我猜返回不是字符串格式,因此是问题所在。也许给我们一些代码而不是截图会帮助我们更好地理解。
  • 当然。我会更新代码
  • @rey 已更新。请检查

标签: javascript node.js amazon-web-services amazon-s3 aws-lambda


【解决方案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
});

更多内容可以参考here

【讨论】:

  • 我不再看到错误,但我也没有得到任何输出。我在 if 和 else 里面放了一个 console.log()。还有一个关于回调函数的开始。他们都没有出现在 CloudWatch 上
  • 活动来了吗?检查一次事件正文中的文件名。如果文件名存在,请尝试在 if 循环中更新上述内容。
  • 我尝试再次实现您指定的方式,并且成功了。谢谢
猜你喜欢
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2022-11-09
  • 1970-01-01
  • 2017-02-12
  • 1970-01-01
  • 1970-01-01
  • 2019-06-09
相关资源
最近更新 更多